NULLIF SQL: Cegah Error Pembagian Nol dengan Elegan
TL;DR
NULLIF adalah fungsi SQL yang ngembaliin NULL kalau dua argumennya sama persis, dan ngembaliin argumen pertama kalau beda. Sintaksnya NULLIF(nilai1, nilai2). Pemakaian paling umum: NULLIF(pembagi, 0) buat nyegah error division by zero, karena pembagian dengan NULL hasilnya NULL, bukan error.
NULLIF adalah fungsi SQL yang ngembaliin NULL kalau dua argumennya sama persis. Kalau beda, dia ngembaliin argumen pertama.
Kedengeran nggak berguna, kan? Kenapa kamu mau sengaja bikin data jadi NULL?
Jawabannya: karena pembagian dengan nol bikin query kamu mati, tapi pembagian dengan NULL itu sah-sah aja.
Apa itu NULLIF di SQL?
NULLIF nerima dua argumen dan ngebandingin keduanya.
NULLIF(nilai1, nilai2)
- Kalau nilai1 = nilai2 → hasilnya NULL
- Kalau nilai1 <> nilai2 → hasilnya nilai1
Contoh cepat:
SELECT NULLIF(0, 0); -- NULL
SELECT NULLIF(120, 0); -- 120
SELECT NULLIF('', ''); -- NULL
SELECT NULLIF('Jakarta', 'Bandung'); -- Jakarta
Fungsi ini standar SQL. Jalan di PostgreSQL, MySQL, SQL Server, Oracle, SQLite, sampai BigQuery — sintaksnya sama semua.
Contoh di artikel ini pakai tabel performa_sales dari dataset Toko Berkah:
CREATE TABLE performa_sales (
id INT PRIMARY KEY,
nama_sales VARCHAR(50),
kota VARCHAR(30),
jumlah_kunjungan INT,
jumlah_closing INT,
total_omzet INT,
catatan VARCHAR(100)
);
INSERT INTO performa_sales VALUES
(1, 'Siti Rahayu', 'Jakarta', 120, 24, 62000000, 'target tercapai'),
(2, 'Budi Santoso', 'Bandung', 85, 12, 31000000, ''),
(3, 'Dewi Lestari', 'Jakarta', 95, 19, 47000000, 'konsisten'),
(4, 'Agus Pratama', 'Surabaya', 0, 0, 0, ''),
(5, 'Rina Wulandari', 'Jakarta', 60, 0, 0, 'baru gabung');
Kenapa pembagian nol bikin query mati?
Pemilik Toko Berkah minta closing rate tiap sales — berapa persen kunjungan yang berujung penjualan.
Query yang kelihatan wajar:
SELECT nama_sales, jumlah_closing / jumlah_kunjungan AS closing_rate
FROM performa_sales;
Di PostgreSQL, hasilnya:
ERROR: division by zero
Bukan cuma baris Agus Pratama yang gagal. Seluruh query mati. Nggak ada satu baris pun yang keluar, walaupun 4 sales lainnya datanya normal.
Ini yang bikin dashboard tiba-tiba blank di hari Senin, cuma gara-gara ada satu sales baru yang belum kunjungan sama sekali.
Gimana NULLIF nyegah error itu?
SQL nolak pembagian dengan nol. Tapi pembagian dengan NULL? Boleh — hasilnya NULL, dan query tetap jalan.
Jadi trik-nya: ubah pembagi nol jadi NULL sebelum pembagian terjadi.
SELECT
nama_sales,
jumlah_closing / NULLIF(jumlah_kunjungan, 0) AS closing_rate
FROM performa_sales;
Sekarang query jalan. Agus Pratama dapat NULL di kolom closing_rate, dan 4 sales lainnya dapat angka normal.
Setiap kali kamu nulis pembagian di SQL, bungkus pembaginya pakai NULLIF. Nggak ada biaya, dan nyelametin query kamu dari mati mendadak.
Gimana bikin hasilnya 0 daripada kosong?
NULL di laporan tetap kelihatan jelek. Bungkus lagi pakai COALESCE.
SELECT
nama_sales,
COALESCE(
ROUND(jumlah_closing * 100.0 / NULLIF(jumlah_kunjungan, 0), 1),
0
) AS closing_rate_persen
FROM performa_sales;
Bacanya dari dalam ke luar:
NULLIF(jumlah_kunjungan, 0)— kunjungan nol jadi NULL.- Pembagian jalan, hasilnya NULL buat Agus.
ROUND(..., 1)— bulatin ke 1 desimal.COALESCE(..., 0)— NULL jadi 0.
Hasil akhirnya:
| Sales | Kunjungan | Closing | Closing rate |
|---|---|---|---|
| Siti Rahayu | 120 | 24 | 20,0% |
| Budi Santoso | 85 | 12 | 14,1% |
| Dewi Lestari | 95 | 19 | 20,0% |
| Agus Pratama | 0 | 0 | 0,0% |
| Rina Wulandari | 60 | 0 | 0,0% |
Perhatiin bedanya Agus dan Rina. Dua-duanya tampil 0%, tapi ceritanya beda jauh: Agus belum kunjungan sama sekali, Rina udah 60 kali kunjungan dan belum ada yang closing.
Ini alasan sebagian analis milih nggak pakai COALESCE di kasus ini — mereka biarin NULL, biar keliatan bedanya "nggak ada data" sama "nol beneran". Pilihan kamu, tapi pilih sadar.
Catatan kecil: perhatiin 100.0, bukan 100. Kalau semua angkanya integer, PostgreSQL bakal ngebulatin hasil bagi jadi integer juga, dan closing rate kamu jadi 0 semua. Kalikan dengan desimal biar hasilnya pecahan.
Pemakaian kedua: bersihin string kosong
Data hasil import sering punya campuran NULL dan string kosong buat hal yang sama. Dua-duanya artinya "nggak ada isi", tapi SQL nganggapnya beda.
SELECT nama_sales, NULLIF(catatan, '') AS catatan_bersih
FROM performa_sales;
Budi dan Agus punya catatan berupa string kosong. NULLIF ngubahnya jadi NULL, jadi seragam.
Setelah seragam, kamu bisa nangani semuanya pakai satu COALESCE:
SELECT
nama_sales,
COALESCE(NULLIF(catatan, ''), 'tidak ada catatan') AS catatan
FROM performa_sales;
Tanpa NULLIF, COALESCE nggak bakal ngefek ke string kosong — dia nganggapnya nilai valid.
Kesalahan umum pakai NULLIF
1. Kebalik urutan argumennya
NULLIF(0, jumlah_kunjungan) itu salah. Argumen pertama yang bakal dikembaliin kalau beda, jadi query kamu bakal ngasih 0 terus. Yang bener: NULLIF(jumlah_kunjungan, 0).
2. Lupa bungkus hasilnya pakai COALESCE
Query kamu selamat, tapi laporannya penuh sel kosong. Kalau laporannya buat orang non-teknis, bungkus.
3. Pakai integer di pembagian persen
jumlah_closing * 100 / NULLIF(jumlah_kunjungan, 0) di PostgreSQL bakal ngasih angka bulat. Pakai 100.0 atau CAST ke DECIMAL.
4. Ngira MySQL aman tanpa NULLIF
MySQL default-nya emang ngasih NULL buat pembagian nol, bukan error. Tapi kalau mode SQL-nya diubah jadi ERROR_FOR_DIVISION_BY_ZERO, dia bakal error juga. Dan query kamu tetap mati waktu dipindah ke PostgreSQL. Tulis NULLIF dari awal.
5. Pakai NULLIF buat nilai yang beda tipe
NULLIF(total_omzet, '0') — angka dibanding teks — bisa error atau ngasih hasil aneh tergantung database. Samain tipenya.
Definisi resminya ada di dokumentasi conditional expressions PostgreSQL.
NULLIF vs CASE WHEN
Kamu bisa nulis hal yang sama pakai CASE:
-- Versi CASE
CASE WHEN jumlah_kunjungan = 0 THEN NULL ELSE jumlah_kunjungan END
-- Versi NULLIF
NULLIF(jumlah_kunjungan, 0)
Hasilnya identik. NULLIF cuma lebih pendek dan langsung kebaca maksudnya. Buat kasus "kalau sama, jadiin NULL", pakai NULLIF. Buat logika yang lebih rumit dari itu, pakai CASE.
FAQ
Apa fungsi NULLIF di SQL?
NULLIF ngebandingin dua nilai. Kalau keduanya sama persis, dia ngembaliin NULL. Kalau beda, dia ngembaliin nilai pertama. Sintaksnya NULLIF(nilai1, nilai2). Pemakaian paling sering: NULLIF(pembagi, 0) buat nyegah error division by zero, karena SQL nganggap pembagian dengan NULL itu sah dan hasilnya NULL.
Kenapa NULLIF bisa nyegah error pembagian nol?
SQL nolak pembagian dengan angka nol dan langsung ngeluarin error. Tapi pembagian dengan NULL itu boleh — hasilnya NULL, dan query tetap jalan. NULLIF(jumlah_kunjungan, 0) ngubah nol jadi NULL sebelum pembagian terjadi, jadi database nggak pernah ketemu pembagi nol.
Apa bedanya NULLIF dan COALESCE?
Arahnya kebalikan. NULLIF ngubah nilai tertentu MENJADI NULL. COALESCE ngubah NULL MENJADI nilai lain. Keduanya sering dipasangin: NULLIF bikin pembagi nol jadi NULL supaya query aman, lalu COALESCE ngubah hasil NULL-nya jadi 0 supaya laporan enak dibaca.
Apakah NULLIF ada di semua database?
Ada. NULLIF itu bagian dari standar SQL, jadi tersedia di PostgreSQL, MySQL, SQL Server, Oracle, SQLite, dan BigQuery dengan sintaks yang sama persis. Kamu nggak perlu ganti apa pun waktu query dipindah antar database.
Bisakah NULLIF dipakai buat string kosong?
Bisa, dan ini pemakaian kedua yang paling sering. NULLIF(catatan, '') ngubah string kosong jadi NULL. Berguna waktu data hasil import punya campuran NULL dan string kosong buat hal yang sama. Setelah diseragamin jadi NULL, kamu bisa nangani semuanya pakai satu COALESCE.
Penutup
Tiga hal yang bikin NULLIF layak masuk kebiasaan kamu:
- Bungkus setiap pembagi pakai NULLIF(kolom, 0). Satu baris kode, dan dashboard kamu berhenti blank mendadak.
- Pasangin sama COALESCE kalau laporannya buat orang non-teknis.
- Pakai NULLIF(kolom, '') buat nyeragamin string kosong dan NULL jadi satu.
Coba sekarang: cari satu query kamu yang ada tanda bagi di dalamnya, dan tambahin NULLIF di pembaginya. Butuh 10 detik, dan itu 10 detik yang bakal kamu syukurin waktu ada data baru masuk dengan nilai nol.
Lanjut baca kenapa NULL kelakuannya aneh di NULL di SQL, atau latihan langsung di halaman fungsi NULLIF NgulikData.
Mau praktek langsung? Mulai latihan SQL gratis
Latihan interaktif, langsung di browser.
Artikel Terkait
7 SQL Client Gratis Terbaik buat Analis Data (2026)
Nggak perlu bayar buat nulis query. Ini 7 SQL client gratis yang beneran dipakai analis, plus kelebihan dan kekurangannya masing-masing.
SQL Style Guide: Cara Nulis Query yang Enak Dibaca Tim
Sepuluh aturan SQL style guide yang bikin query kamu kebaca sama tim — dan sama kamu sendiri 6 bulan lagi. Lengkap dengan contoh sebelum-sesudah.
Take-Home Test SQL Data Analyst: Contoh Soal + Cara Ngerjainnya
Contoh soal take-home test SQL yang beneran dipakai perusahaan, dikerjain step by step — dari baca soal, nulis query, sampai nyusun insight yang bikin recruiter nengok.