TL;DR
Text-to-SQL adalah kemampuan model AI ngubah pertanyaan bahasa manusia jadi query SQL. Kesalahan paling berbahaya bukan query yang error, tapi query yang jalan mulus dengan angka salah, biasanya gara-gara JOIN yang menggandakan baris atau filter bisnis yang nggak pernah ditulis di mana pun. Cara paling murah nurunin risikonya: kasih komentar kolom di database, sediakan view siap pakai, dan selalu cek jumlah baris sebelum percaya hasilnya.
Query yang dibikin AI jarang error. Itu justru bagian yang bikin repot.
Query yang error langsung ketahuan dan kamu perbaiki. Query yang jalan mulus dengan angka salah bakal lolos ke slide rapat, dan baru ketahuan pas ada yang bandingin sama catatan kasir.
Aku pernah lempar 40 pertanyaan ke asisten AI di skema toko_berkah. Semua balikin query yang jalan. Sebelas di antaranya ngasih angka yang salah. Berikut sumber kesalahannya dan cara nutupinnya.
Text-to-SQL adalah kemampuan model AI nerjemahin pertanyaan bahasa manusia jadi query SQL yang bisa dijalanin di database. Kamu ketik "omzet per kota bulan Oktober", model balikin SELECT kota, SUM(total) ... GROUP BY kota. Yang dia lakukan itu nebak maksudmu berdasarkan nama tabel dan nama kolom yang dia lihat.
Kata kuncinya nebak. Model nggak tau aturan bisnis yang nggak tertulis di skema. Dia juga nggak tau kolom total itu udah termasuk ongkir atau belum.
Ada enam sumber kesalahan yang paling sering muncul. Empat pertama yang bikin angka meleset diam-diam.
Ini penyebab nomor satu di catatanku. Kamu punya tabel transaksi dan transaksi_item. Satu transaksi bisa punya lima item. Waktu AI nge-JOIN keduanya terus jumlahin kolom total dari tabel transaksi, angkanya kehitung lima kali.
-- Salah: total transaksi kehitung sebanyak jumlah itemnya
SELECT t.kota, SUM(t.total) AS omzet
FROM transaksi t
JOIN transaksi_item i ON i.transaksi_id = t.id
GROUP BY t.kota;
-- Benar: agregasi di level yang tepat
SELECT kota, SUM(total) AS omzet
FROM transaksi
GROUP BY kota;
Query pertama jalan. Hasilnya cantik. Angkanya ngaco. Kalau kamu perlu penyegaran soal perilaku JOIN, artikel LEFT JOIN di SQL ngasih contoh pergerakan barisnya.
Di hampir setiap perusahaan ada aturan lisan. Transaksi berstatus batal nggak dihitung. Akun karyawan dikecualikan dari laporan. Toko cabang uji coba dibuang.
Aturan itu ada di kepala orang, bukan di skema. Model nggak punya cara nebaknya.
Model nulis WHERE status = 'batal'. Data aslinya nyimpen 'BATAL', 'Batal', dan 'cancelled' sekaligus, warisan tiga versi aplikasi. Query jalan, hasilnya nol baris, dan orang menyimpulkan nggak ada transaksi batal.
Ini pekerjaan data quality yang belum kelar, bukan salah modelnya.
Kolom created_at disimpan dalam UTC. Bisnisnya jalan di WIB. Pertanyaan "penjualan hari ini" bikin transaksi jam 7 pagi WIB masuk ke tanggal kemarin. Selisihnya kecil per hari, tapi konsisten salah.
"Pelanggan aktif" di tim marketing artinya pernah buka aplikasi 30 hari terakhir. Di tim keuangan artinya pernah bayar. Model bakal pilih salah satu tanpa nanya, dan pilihannya nggak selalu sama dengan maksudmu.
Kolom bernama flag_1, tipe_2, atau amt nggak ngasih petunjuk apa-apa. Model nebak dari namanya, dan nama yang buruk ngasih tebakan yang buruk.
Lima langkah, urut dari yang paling murah.
COMMENT ON yang nyimpen deskripsi di katalog sistem. Banyak asisten AI ikut baca ini waktu nyusun query. Sintaksnya ada di dokumentasi PostgreSQL.
COMMENT ON COLUMN transaksi.total IS
'Total bayar dalam rupiah, sudah termasuk pajak, belum termasuk ongkir';
COMMENT ON COLUMN transaksi.status IS
'Isi: lunas, pending, batal. Laporan omzet hanya pakai status lunas';
v_transaksi_valid yang filter bisnisnya udah nempel, terus arahkan AI ke situ. Model nggak perlu nebak aturan yang udah kamu tulis sekali.SELECT COUNT(*) AS baris_sebelum FROM transaksi;
SELECT COUNT(*) AS baris_sesudah
FROM transaksi t
JOIN transaksi_item i ON i.transaksi_id = t.id;
Kalau angka kedua lebih besar, agregasimu bakal menggelembung. Perilaku aggregate function kayak SUM nggak peduli barisnya duplikat atau nggak.
Skemanya empat tabel: transaksi, transaksi_item, produk, pelanggan. Isinya 12.400 transaksi selama enam bulan. Aku bikin 40 pertanyaan yang biasa dilempar pemilik toko, terus ngecek hasilnya satu per satu lawan hitungan manual.
| Hasil | Jumlah | Penyebab utama |
|---|---|---|
| Benar | 29 | Pertanyaan satu tabel, tanpa filter tersembunyi |
| Jalan tapi angka salah | 11 | 6 gara-gara JOIN menggandakan baris, 3 gara-gara status batal ikut kehitung, 2 gara-gara batas tanggal |
| Error | 0 | Nggak ada |
Yang menarik, selisih paling besar datang dari pertanyaan yang kedengeran gampang: "produk apa yang paling banyak nyumbang omzet". Query-nya nge-JOIN ke tabel item terus jumlahin transaksi.total, jadi omzet produk paling laris kecatat Rp 218.700.000, padahal aslinya Rp 74.900.000. Hampir tiga kali lipat.
Setelah aku tambahin komentar kolom dan bikin dua view bersih, aku ulangi 40 pertanyaan yang sama. Yang salah turun dari 11 jadi 3. Ketiganya soal definisi metrik yang memang belum disepakati timnya.
Kalau kamu baru mulai pakai AI buat nulis query, artikel cara pakai AI buat bikin query SQL ngebahas alurnya dari awal.
UPDATE atau DELETE.Text-to-SQL adalah fitur yang ngubah pertanyaan bahasa sehari-hari jadi query SQL, misalnya dari "omzet Oktober per kota" jadi SELECT lengkap dengan GROUP BY. Query builder beda, dia cuma ngerangkai pilihan yang kamu klik, jadi hasilnya bisa ditebak. Text-to-SQL nebak maksudmu, jadi dia bisa salah nebak walaupun query-nya jalan tanpa error.
Query yang jalan mulus tapi angkanya salah. Penyebab paling sering JOIN yang menggandakan baris, jadi satu transaksi kehitung berkali-kali dan omzetnya membengkak. Nggak ada pesan error yang muncul. Kamu baru sadar kalau kebetulan bandingin sama rekap manual. Makanya cek jumlah baris sebelum dan sesudah JOIN itu kebiasaan yang murah dan menyelamatkan.
Isi komentar kolom di database pakai perintah COMMENT ON. Banyak asisten AI ikut baca deskripsi itu waktu nyusun query. Tulis artinya dalam kalimat pendek, sebut satuan dan nilai yang mungkin muncul. Contohnya kolom status transaksi, sebutkan isinya lunas, batal, atau pending. Ini langkah paling murah yang dampaknya paling kelihatan.
Dari yang aku lihat, bagian ngetik query memang makin cepat dikerjain AI. Yang nggak ikut kepindah itu tanggung jawab mastiin angkanya benar dan tau filter bisnis apa yang harus dipasang. Analis yang paham datanya justru jadi lebih penting, soalnya dia satu-satunya yang bisa nangkep query yang jalan tapi salah sebelum masuk laporan.
Kalau bisa jangan. Pakai akun read-only yang cuma bisa baca schema analitik, dan matikan izin ke tabel berisi data pribadi. Sediakan view yang udah bersih sebagai pintu masuknya. Ini nurunin dua risiko sekaligus: query yang nggak sengaja ngubah data, dan data sensitif yang kekirim ke layanan luar tanpa kamu sadari.
Tiga hal yang perlu kamu bawa:
Coba hari ini: ambil satu query hasil AI yang kamu pakai minggu lalu, hitung jumlah barisnya sebelum dan sesudah JOIN. Kalau angkanya beda, kamu baru nemu satu laporan yang perlu dibetulin.
Lanjut baca panduan gaya nulis SQL supaya query buatanmu maupun buatan AI lebih gampang diperiksa, dan data lineage buat nelusurin angka yang kelanjur salah.
Mau praktek langsung? Mulai latihan SQL gratis
Latihan interaktif, langsung di browser.
Tools AI bisa bikin chart dan ringkas data dalam hitungan detik. Jadi Python masih perlu dipelajari analis di 2026? Jawabannya iya, tapi alasannya udah beda dari 3 tahun lalu.
Aku tes forecasting AI di data penjualan 4 cabang toko grosir. Hasilnya lebih akurat dari tebakan manual, tapi meleset parah di satu titik yang mahal.
Cara ngolah ribuan review pelanggan jadi insight pakai AI, dari nyusun prompt yang konsisten, ngasih label, sampai ngubah hasilnya jadi rekomendasi yang bisa dieksekusi.