Tepat. NULL
mewakili nilai yang tidak diketahui, bukan nilai spesifik apa pun (tidak sama dengan NULL
dalam C, atau nil
di Ruby, dll.) Dalam SQL, jika Anda membandingkan sesuatu dengan nilai yang tidak diketahui, hasilnya juga tidak diketahui. Dan Anda tidak akan mendapatkan baris di mana WHERE
kondisi tidak diketahui.
Coba ini:
SELECT NULL <> 2;
dan Anda akan melihat NULL
sebagai hasilnya.
Coba ini:
SELECT * FROM t WHERE NULL;
dan tidak ada baris yang akan keluar, meskipun tabel t
sangat besar.
Jika Anda benar-benar membutuhkan apa yang Anda inginkan (dan saya tidak menganjurkan ini), Anda dapat melakukan sesuatu seperti ini:
SELECT T.f1, T.f2
FROM (SELECT NULL f1, 'a' f2) T
WHERE ((T.f1 IS NULL OR T.f2 IS NULL)
AND (T.f1 IS NOT NULL OR T.f2 IS NOT NULL))
OR T.f1 <> T.f2