Sorun şu ki, NULL kendisi için bile hiçbir şeye eşit kabul edilmez, ama garip olan kısım da kendine eşit değildir .
Aşağıdaki ifadeleri göz önünde bulundurun (SQL Server T-SQL'de BTW yasadışıdır, ancak My-SQL'de geçerlidir, ancak ANSI null için tanımladığı şey budur ve SQL Server'da vaka ifadeleri vb. Kullanılarak doğrulanabilir)
SELECT NULL = NULL -- Results in NULL
SELECT NULL <> NULL -- Results in NULL
Dolayısıyla soruya doğru / yanlış cevap yoktur, bunun yerine cevap da boştur.
Bunun birçok etkisi vardır, örneğin
- Açıkça kullanmadığınız sürece herhangi boş değeri her zaman BAŞKA maddesini kullanacak olan VAKA ifadeleri, ZAMAN BOŞ koşulu (IS DEĞİL koşul )
WHEN NULL
- Dize birleştirme, as
SELECT a + NULL -- Results in NULL
- WHERE IN veya WHERE NOT IN yan tümcesinde, doğru sonuçlar istiyormuş gibi ilişkili alt sorguda boş değerleri filtrelediğinizden emin olun.
Bir belirterek SQL Server'da bu davranışı geçersiz kılabilir SET ANSI_NULLS OFF
, ancak bu tavsiye DEĞİLDİR ve standart sapması nedeniyle birçok soruna neden olabileceği için yapılmamalıdır.
(Yan not olarak, My-SQL'de <=>
boş karşılaştırma için özel bir işleç kullanma seçeneği vardır .)
Buna karşılık, genel olarak programlama dillerinde boş değer işleme tabi tutulur ve kendisine eşittir, ancak aynı zamanda kendisine eşit olmayan NAN değeridir, ancak en azından kendisiyle karşılaştırıldığında 'yanlış' döndürür (ve eşit olmadığında kontrol ederken farklı programlama dilleri farklı uygulamalara sahiptir).
Bununla birlikte, Temel dillerde (yani VB vb.) 'Null' anahtar kelimesi olmadığını ve bunun yerine doğrudan karşılaştırmada kullanılamayan ve bunun yerine SQL'deki gibi 'IS' kullanması gereken 'Nothing' anahtar kelimesini kullandığını, bununla birlikte aslında kendine eşittir (dolaylı karşılaştırmalar kullanılırken).