NULL merepresentasikan nilai yang hilang atau tidak diketahui — bukan nol, bukan string kosong, tetapi ketiadaan nilai. NULL memiliki perilaku khusus, terkadang mengejutkan dalam perbandingan, agregat, dan logika — menjadikannya sumber umum bug.
NULL adalah "tidak diketahui" — perbandingan dengan NULL
-- ❌ you CANNOT compare to NULL with = or <> (the result is "unknown," never true)
WHERE email = NULL -- returns NOTHING (never true!)
WHERE email <> NULL -- also returns nothing
-- ✅ use IS NULL / IS NOT NULL
WHERE email IS NULL
WHERE email IS NOT NULL
Karena NULL berarti "tidak diketahui," setiap perbandingan dengan NULL menghasilkan "tidak diketahui" (bukan true), jadi = NULL tidak pernah cocok. Anda harus menggunakan IS NULL/IS NOT NULL — kesalahan NULL paling umum.
NULL dalam logika tiga-nilai
SQL uses THREE-valued logic: TRUE, FALSE, and UNKNOWN (NULL).
NULL = NULL → UNKNOWN (not true!)
NULL AND true → UNKNOWN
NULL OR true → TRUE
NOT NULL → UNKNOWN
→ Conditions evaluating to UNKNOWN are treated as not-matching by WHERE.
NULL dalam agregat dan aritmetika
-- aggregates IGNORE NULLs (except COUNT(*))
SELECT AVG(salary) FROM employees; -- averages only non-NULL salaries
SELECT COUNT(salary) FROM employees; -- counts only non-NULL (vs COUNT(*) = all rows)
-- arithmetic with NULL → NULL
SELECT price + NULL; -- NULL (any operation with NULL is NULL)
Agregat melewatkan NULLs, dan setiap aritmetika yang melibatkan NULL menghasilkan NULL.
Menangani NULL: COALESCE dan NULLIF
-- COALESCE — return the first non-NULL value (provide a default)
SELECT COALESCE(phone, 'No phone') FROM users; -- 'No phone' if phone is NULL
SELECT COALESCE(nickname, name, 'Unknown') FROM users; -- first non-NULL
-- NULLIF — return NULL if two values are equal
SELECT NULLIF(value, 0); -- NULL if value is 0 (e.g. avoid divide-by-zero)
COALESCE menyediakan fallback untuk NULL (sangat umum untuk default), dan NULLIF mengonversi nilai ke NULL secara kondisional.
Mengapa ini penting
Memahami perilaku NULL sangat penting untuk menulis SQL yang benar, karena semantik khusus NULL adalah sumber sering dari bug halus — dan NULL muncul terus-menerus dalam data nyata (field opsional, nilai yang hilang, join yang tidak cocok).
Poin paling kritis dan yang sering disalahpahami adalah bahwa NULL berarti "tidak diketahui," jadi Anda tidak dapat membandingkannya dengan = (bug terkenal di mana WHERE col = NULL diam-diam tidak mengembalikan apa pun); Anda harus menggunakan IS NULL/IS NOT NULL.
Memahami logika tiga-nilai SQL (TRUE/FALSE/UNKNOWN, di mana perbandingan dengan NULL menghasilkan UNKNOWN dan diperlakukan sebagai tidak cocok) menjelaskan berbagai perilaku yang membingungkan dan penting untuk menulis kondisi dengan benar.
Mengetahui bahwa agregat mengabaikan NULLs (mempengaruhi AVG, COUNT, dll. — terkadang mengejutkan), bahwa aritmetika dengan NULL menghasilkan NULL, dan cara menangani NULLs dengan COALESCE (menyediakan default/fallback — kebutuhan yang sangat umum) dan NULLIF adalah pengetahuan praktis yang sering diterapkan.
Karena NULLs tersebar luas dalam database nyata (kolom nullable apa pun, LEFT JOIN apa pun), dan karena perilaku NULL yang tidak intuitif (terutama masalah perbandingan dan logika tiga-nilai) menyebabkan bug nyata yang sulit di-debug, memahami bagaimana NULL berperilaku — perbandingan, logika, agregat, dan penanganan — adalah pengetahuan inti yang harus diketahui untuk menulis SQL yang benar dan topik wawancara umum yang mengungkapkan pemahaman tentang aspek database yang sering disalahpahami.
