Ich bin immer verwirrt über ein mysteriöses T-SQL-Verhalten wie das folgende
-- Create table t and insert values.
use tempdb
CREATE TABLE dbo.t (a INT NULL);
-- insert 3 values
INSERT INTO dbo.t values (NULL),(0),(1);
GO
set ansi_nulls off -- purposely turn off, so we can allow NULL comparison, such as null = null
go
-- expect 3 rows returned but only 2 returned (without null value row)
select * from dbo.t where a = a
Hierbei geht es nicht darum, wie alle Zeilen in einer Tabelle abgerufen werden, und auch nicht darum, die Verwendung von ANSI_NULLS zu vermeiden.
Ich möchte nur einige Einblicke gewinnen, warum sich t-sql so verhält.