为什么检查现有数据不包括SQL Server 2008中的NULL

Maf*_*elu 0 sql sql-server

这可能是其他数据库中的情况,但是当您进行以下查询时

SELECT * FROM MyTbl WHERE MyColumn != 'Foo'
Run Code Online (Sandbox Code Playgroud)

那么MyColumn的任何记录,比方说,'Bar'被取出但不是MyColumn为NULL的地方.我认为这是预期的行为,背后有一个原因,我想知道为什么.

NULL被认为等于'Foo',或者它只是不期望成为条件的一部分,因为条件(NULL!='Foo')似乎是真的.

xle*_*ier 5

在DB逻辑中,NULL意味着该字段中根本没有定义的数据.它被认为与任何事物都不相同或不同.如果要获取相关行,则必须明确过滤它:

SELECT * FROM MyTbl WHERE MyColumn != 'Foo' OR MyColumn IS NULL
Run Code Online (Sandbox Code Playgroud)

维基百科.