NULL memiliki perilaku khusus:membandingkan apa pun dengan NULL memberi Anda kembali NULL
, yang merupakan sesuatu selain false
atau 0
. Artinya "tidak diketahui".
Misalnya, ambil tabel ini:
user_id | gender
------------------
1 | NULL
2 | 'M'
3 | 'F'
4 | 'F'
SELECT * FROM mytable WHERE gender = 'M'
akan mengembalikan 1 baris, seperti yang diharapkan
SELECT * FROM mytable WHERE gender != 'M'
akan mengembalikan 2 baris, BUKAN 3 baris.
SELECT * FROM mytable WHERE gender != 'M' OR gender IS NULL
akan mengembalikan 3 baris yang diharapkan.
Sunting:Untuk beberapa aplikasi, menggunakan 0
(atau, Tuhan melarang, "angka ajaib") lain daripada NULL
bahkan tidak disarankan (satuan atau nilai eksak tidak relevan dalam contoh ini):
Date | Temperature
--------------------------
2010-01-01 | 10
2010-01-02 | 4
2010-01-03 | 0
2010-01-04 | -22
2010-01-05 | -45
2010-01-06 | NULL
2010-01-07 | -34
Di sini, NULL
pada 6 Januari berarti "nilai tidak diketahui" - mungkin karena suhunya sangat rendah sehingga probe termometer berhenti merespons. Namun, ini berbeda artinya dengan 3 Januari, saat suhu 0
, yaitu, 0 derajat.
Juga, seperti yang disebutkan @Bill Karwin, NULL berperilaku khusus dalam fungsi agregat (COUNT
,SUM
,AVG
dll.):menghitung AVG(Temperature)
pada data di atas akan memberi Anda -14.5
, karena baris NULL diabaikan.