나는 항상 다음과 같은 신비한 t-sql 동작에 대해 의아해합니다.
-- 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
이것은 테이블의 모든 행을 검색하는 방법이 아니라 ANSI_NULLS의 사용을 피하는 것이 아닙니다.
왜 t-sql이 이런 식으로 작동하는지 통찰력을 요구하고 싶습니다.