IS DISTINCT FROM predikat diperkenalkan sebagai fitur T151 dari SQL:1999, dan negasinya yang dapat dibaca, IS NOT DISTINCT FROM , telah ditambahkan sebagai fitur T152 dari SQL:2003. Maksud dari predikat ini adalah untuk menjamin bahwa hasil dari membandingkan dua nilai adalah Benar atau Salah , tidak pernah Tidak diketahui .
Predikat ini bekerja dengan jenis yang sebanding (termasuk baris, array, dan multiset) sehingga agak rumit untuk menirunya dengan tepat. Namun, SQL Server tidak mendukung sebagian besar jenis ini, jadi kita bisa mendapatkan cukup jauh dengan memeriksa argumen/operan nol:
-
a IS DISTINCT FROM bdapat ditulis ulang sebagai:((a <> b OR a IS NULL OR b IS NULL) AND NOT (a IS NULL AND b IS NULL)) -
a IS NOT DISTINCT FROM bdapat ditulis ulang sebagai:(NOT (a <> b OR a IS NULL OR b IS NULL) OR (a IS NULL AND b IS NULL))
Jawaban Anda sendiri salah karena gagal mempertimbangkan bahwa FALSE OR NULL mengevaluasi ke Tidak Diketahui . Misalnya, NULL IS DISTINCT FROM NULL harus mengevaluasi ke Salah . Demikian pula, 1 IS NOT DISTINCT FROM NULL harus mengevaluasi ke Salah . Dalam kedua kasus, ekspresi Anda menghasilkan Tidak Diketahui .