小编典典

IS NULL与<> 1个SQL位

sql

我在SQL Server 2012数据库的表上有一点列。

我正在尝试检索此位列为NULLtrue或NOT TRUE的所有行。

该查询不带回它应该返回的内容:(返回0行)

Select * 
from table 
where bit_column_value <> 1

此查询带回正确的行:

Select * 
from table 
where bit_column_value IS NULL

现在,我很乐意使用第二个查询,但是我的问题是,在对另一个表进行类似的查询中,上述相反的做法是正确的,其中第一种方法可行,但第二种方法无效!

有人可以帮忙解释一下上面的区别吗?我已将相关的位列专门更新为NULL,这不会更改结果。(认为​​“空”和Null值之间可能存在差异。

预先感谢您的任何解释。


阅读 194

收藏
2021-03-23

共1个答案

小编典典

之所以<>不起作用是SQL对待NULL未知-
它不知道什么NULL是应该的意思,所以它会评估=,并<>NULLUNKNOWN(在where子句或连接条件视为假)。有关更多信息,请阅读:SQL
Server中为什么NULL =
NULL评估为false

如果上面有一个索引,则使用ISNULL函数将意味着该索引无法使用,因此要确保查询可以使用该索引,只需使用OR

SELECT * 
FROM TableName
WHERE
   bit_column_value IS NULL OR bit_column_value = 0
2021-03-23