对SQL-92中NULL比较的一点疑问
somn 2003-04-29 12:00:33 在SQL2000的联机丛书中是这样描述的:
SQL-92 标准要求对空值的等于 (=) 或不等于 (<>) 比较取值为 FALSE。当 SET ANSI_NULLS 为 ON 时,即使 column_name 中存在空值,使用 WHERE column_name = NULL 的 SELECT 语句仍返回零行。即使 column_name 中存在非空值,使用 WHERE column_name <> NULL 的 SELECT 语句仍返回零行。
当 SET ANSI_NULLS 为 OFF 时,等于 (=) 和不等于 (<>) 比较运算符不遵从 SQL-92 标准。使用 WHERE column_name = NULL 的 SELECT 语句返回 column_name 中含有空值的行。使用 WHERE column_name <> NULL 的 SELECT 语句返回列中含有非空值的行。此外,使用 WHERE column_name <> XYZ_value 的 SELECT 语句返回所有非 XYZ 值和非 NULL的行。
有哪位能解释一下SQL-92为什么要做这样的改变吗?我个人觉得直接比较不是挺好的吗?比如说我一个字段COLUMN1,我要判断表中是不是有在这个字段为空值的记录,我可以这样写:select * from table1 where column1=null 为什么SQL-92中规定要这样写:select * from table1 where column1 is null ?
请了解sql-92的这项改变原因的能够提供详细的描述或者给出资料链接,谢谢!