Bu takdirde hiçbir satır döndürülür anlamına gelir @region
ise NULL
ilk örnekte kullanılan zaman tabloda satır olduğunda bile, Region
bir NULL
.
Ne zaman ANSI_NULLS
açıksa (yine de her zaman ayarlamanız gerekir, çünkü bunu göstermeme seçeneği gelecekte kaldırılacaktır), işlenenlerden birinin (en azından) olduğu herhangi bir karşılaştırma işlemi NULL
üçüncü mantık değerini üretir - UNKNOWN
( TRUE
ve FALSE
) aksine .
UNKNOWN
değerler, önceden karar verilmemişse (örneğin AND
bir FALSE
işlenenle veya OR
bir TRUE
işlenenle) veya olumsuzluklarla ( NOT
) herhangi bir birleştirici mantıksal işleç yoluyla yayılır .
WHERE
Maddesi tarafından üretilen sonuç kümesi filtrelemek için kullanılır FROM
madde, toplam değer, bu WHERE
madde olmalıdır TRUE
satır için filtrelenebilir değil. Dolayısıyla, UNKNOWN
herhangi bir karşılaştırma ile üretilirse, satırın filtrelenmesine neden olur.
@ user1227804'ün cevabı şu alıntıyı içerir:
Karşılaştırmanın her iki tarafı da sütun veya bileşik ifadeyse, ayar karşılaştırmayı etkilemez.
itibaren *SET ANSI_NULLS
Bununla birlikte, hangi noktaya gelmeye çalıştığından emin değilim, çünkü iki NULL
sütun karşılaştırılırsa (örneğin a'da JOIN
), karşılaştırma yine de başarısız olur:
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
Yukarıdaki sorgu 0 satır döndürürken:
select * from
Bir satır döndürür. Yani her iki işlenen de sütun olsa bile NULL
eşit değildir NULL
. Ve dokümantasyonunda=
işlenenler hakkında söylenecek hiçbir şey yok:
İki NULL
ifadeyi karşılaştırdığınızda , sonuç ANSI_NULLS
ayara bağlıdır :
Olarak ANSI_NULLS
ayarlanırsa , ANSI kuralına göre, bir (veya bilinmeyen) değerin başka veya bilinmeyen bir değere eşit olmadığı ON
sonucu NULL
1 olur .NULL
NULL
Olarak ANSI_NULLS
ayarlanmışsa OFF
, NULL
karşılaştırmanın sonucu NULL
eşittir TRUE
.
Değer NULL
olmayan ile karşılaştırmak NULL
her zaman FALSE
2 ile sonuçlanır .
Ancak, her iki 1 ve 2 yanlıştır - her ikisi de karşılaştırmalar sonucudur UNKNOWN
.
* Bu metnin şifreli anlamı nihayet yıllar sonra keşfedildi. Gerçekte anlamı, bu karşılaştırmalar için ayarın hiçbir etkisinin olmaması ve her zaman ayar AÇIKmış gibi davranmasıdır . SET ANSI_NULLS OFF
Hiçbir etkisi olmayan ortam olduğunu belirtmiş olsaydı daha net olurdu .