Tôi luôn bối rối về một số hành vi t-sql bí ẩn, như sau
-- 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
Đây không phải là về cách lấy tất cả các hàng trong một bảng và cũng không phải là về việc tránh sử dụng ANSI_NULLS.
Tôi chỉ muốn thu hút một số hiểu biết tại sao t-sql hành xử như thế này.