从Wikipedia条目上的NULL:
例如,WHERe子句或条件语句可能会将列的值与常量进行比较。通常错误地认为,如果该字段包含Null,则缺失值将“小于”或“不等于”常量,但实际上,此类表达式返回Unknown。下面是一个示例:
-- Rows where num is NULL will not be returned,-- contrary to many users' expectations.SELECt * FROM sometable WHERe num <> 1;
基本上,NULL和其他 任何 东西之间的 任何 比较(无论是=还是<>)都将是不正确的。
作为另一参考,MSDN T-SQL页面上
<>指出:
比较两个表达式(比较运算符)。比较非空表达式时,如果左操作数不等于右操作数,则结果为TRUE;否则,结果为TRUE。否则,结果为FALSE。如果一个或两个操作数均为NULL,请参见SET
ANSI_NULLS(Transact-SQL)。
该SET ANSI_NULLS然后页指出:
当SET ANSI_NULLS为ON时,即使column_name中包含空值,使用WHERe column_name =
NULL的SELECT语句也将返回零行。即使column_name中包含非空值,使用WHERe column_name <>
NULL的SELECT语句也将返回零行。…
当SET ANSI_NULLS设置为ON时,所有与空值的比较都将得出UNKNOWN。当SET
ANSI_NULLS为OFF时,如果数据值为NULL,则将所有数据与null值的比较评估为TRUE。



