Ini berarti bahwa tidak ada baris akan dikembalikan jika @regionadalah NULL, bila digunakan dalam contoh pertama Anda, bahkan jika ada baris dalam tabel di mana RegionadalahNULL .
When ANSI_NULLSaktif (yang harus selalu Anda aktifkan, karena opsi untuk tidak mengaktifkannya akan dihapus di masa mendatang), operasi perbandingan apa pun di mana (setidaknya) salah satu operan NULLmenghasilkan nilai logika ketiga - UNKNOWN( sebagai lawan TRUEdan FALSE).
UNKNOWNnilai menyebar melalui operator boolean gabungan jika mereka belum diputuskan (misalnya ANDdengan FALSEoperan atau ORdengan TRUEoperan) atau negasi ( NOT).
The WHEREklausul digunakan untuk menyaring hasil set dihasilkan oleh FROMklausa, sehingga nilai keseluruhan dari WHEREklausul harus TRUEuntuk baris untuk tidak difilter. Jadi, jika suatu UNKNOWNdihasilkan oleh perbandingan apa pun, itu akan menyebabkan baris disaring.
@ user1227804 ini jawaban meliputi kutipan ini:
Jika kedua sisi perbandingan adalah kolom atau ekspresi gabungan, pengaturan tidak mempengaruhi perbandingan.
dari SET ANSI_NULLS *
Namun, saya tidak yakin poin apa yang coba dibuatnya, karena jika dua NULLkolom dibandingkan (misalnya dalam a JOIN), perbandingan masih gagal:
create table
ID int not null,
Val1 varchar(10) null
)
insert into
create table
ID int not null,
Val1 varchar(10) null
)
insert into
select * from
Kueri di atas mengembalikan 0 baris, sedangkan:
select * from
Menampilkan satu baris. Jadi meskipun kedua operan adalah kolom, NULLtidak sama NULL. Dan dokumentasi untuk= tidak menjelaskan apa pun tentang operan:
Saat Anda membandingkan dua NULLekspresi, hasilnya bergantung pada ANSI_NULLSpengaturan:
Jika ANSI_NULLSdiatur ke ON, hasilnya adalah NULL1 , mengikuti konvensi ANSI bahwa nilai NULL(atau tidak diketahui) tidak sama dengan nilai lain NULLatau tidak diketahui.
Jika ANSI_NULLSdiset ke OFF, hasil dari NULLdibandingkan dengan NULLadalah TRUE.
Membandingkan NULLdengan non- NULLnilai selalu menghasilkan FALSE2 .
Namun, 1 dan 2 salah - hasil dari kedua perbandingan adalah UNKNOWN.
* Arti samar teks ini akhirnya ditemukan bertahun-tahun kemudian. Artinya sebenarnya, untuk perbandingan tersebut, setelan tidak berpengaruh dan selalu bertindak seolah-olah setelan AKTIF . Akan lebih jelas jika itu menyatakan bahwa SET ANSI_NULLS OFFitu adalah pengaturan yang tidak berpengaruh.