Masalahnya adalah bahwa NULL tidak dianggap sama dengan apa pun bahkan tidak dengan dirinya sendiri, tetapi bagian yang aneh adalah bahwa itu juga tidak sama dengan dirinya sendiri.
Pertimbangkan pernyataan berikut (yang ilegal BTW di SQL Server T-SQL tetapi valid dalam My-SQL, namun ini adalah apa yang ANSI tetapkan untuk null, dan dapat diverifikasi bahkan dalam SQL Server dengan menggunakan pernyataan kasus, dll.)
SELECT NULL = NULL -- Results in NULL
SELECT NULL <> NULL -- Results in NULL
Jadi tidak ada jawaban benar / salah untuk pertanyaan, sebaliknya jawabannya juga nol.
Ini memiliki banyak implikasi, misalnya dalam
- Pernyataan CASE, di mana setiap nilai null akan selalu menggunakan klausa ELSE kecuali jika Anda menggunakan eksplisit KETIKA IS kondisi NULL ( TIDAK yang
WHEN NULL
kondisi )
- Rangkaian string, sebagai
SELECT a + NULL -- Results in NULL
- Dalam klausa WHERE IN atau WHERE NOT IN, seolah-olah Anda ingin hasil yang benar, pastikan dalam sub-kueri yang berkorelasi untuk memfilter nilai null apa pun.
Seseorang dapat mengesampingkan perilaku ini dalam SQL Server dengan menentukan SET ANSI_NULLS OFF
, namun ini TIDAK dianjurkan dan tidak boleh dilakukan karena dapat menyebabkan banyak masalah, hanya karena penyimpangan standar.
(Sebagai catatan, di My-SQL ada opsi untuk menggunakan operator khusus <=>
untuk perbandingan nol.)
Sebagai perbandingan, dalam bahasa pemrograman umum null diperlakukan sebagai nilai reguler dan sama dengan dirinya sendiri, namun itu adalah nilai NAN yang juga tidak sama dengan dirinya sendiri, tetapi setidaknya mengembalikan 'salah' ketika membandingkannya dengan dirinya sendiri, (dan ketika memeriksa tidak sama dengan bahasa pemrograman yang berbeda, memiliki implementasi yang berbeda).
Perhatikan bahwa dalam bahasa-bahasa Basic (mis. VB dll.) Tidak ada kata kunci 'null' dan sebaliknya orang menggunakan kata kunci 'Nothing', yang tidak dapat digunakan dalam perbandingan langsung dan sebagai gantinya orang perlu menggunakan 'IS' seperti dalam SQL, namun sebenarnya sama dengan dirinya sendiri (saat menggunakan perbandingan tidak langsung).