Aus SET ANSI_NULLS (Transact-SQL)
Wenn SET ANSI_NULLS aktiviert ist, gibt eine SELECT-Anweisung, die WHERE column_name = NULL verwendet, auch dann null Zeilen zurück, wenn column_name Nullwerte enthält. Eine SELECT-Anweisung, die WHERE column_name <> NULL verwendet, gibt auch dann null Zeilen zurück, wenn column_name Nicht-NULL-Werte enthält.
Jetzt, wenn Sie verwenden würden
SET ANSI_NULLS OFF;
-- Abfrage 1
SELECT 'StackOverFlow' AS Statement11
WHERE 'Name' IN ('S','Q', 'L', 'Authority', NULL);
-- Abfrage 2
SELECT 'StackOverFlow' AS Statement12
WHERE 'Name' NOT IN ('S','Q', 'L', NULL);
Die zweite Abfrage würde ein Ergebnis zurückgeben.
Wenn SET ANSI_NULLS aktiviert ist, evaluieren alle Vergleiche gegen einen Nullwert zu UNKNOWN. Wenn SET ANSI_NULLS deaktiviert ist, evaluieren Vergleiche aller Daten gegen einen Nullwert zu TRUE, wenn der Datenwert NULL ist.
EDIT
Wie von @Damien_The_Unveliever erwähnt
von IN (Transact-SQL)
Alle durch eine Unterabfrage oder Ausdruck zurückgegebenen Nullwerte, die mit test_expression unter Verwendung von IN oder NOT IN verglichen werden, geben UNKNOWN zurück. Die Verwendung von Nullwerten zusammen mit IN oder NOT IN kann zu unerwarteten Ergebnissen führen.