SQL select不是字符串不返回NULL值

Oma*_*mar 4 t-sql sql-server

给出以下表格和数据

CREATE TABLE #temps
(
    id int,
    name varchar(max)
)

INSERT INTO #temps VALUES (1, 'foo')
INSERT INTO #temps VALUES (2, '')
INSERT INTO #temps VALUES (3, NULL)
Run Code Online (Sandbox Code Playgroud)

我要选择没有所有行fooname列.

SELECT * FROM #temps
WHERE name <> 'foo'

DROP TABLE #temps
Run Code Online (Sandbox Code Playgroud)

为什么这只返回第2行?第3行中的名称不是foo,应该返回.

Lee*_*e D 5

我的解决方案是

SELECT * FROM #temps
WHERE ISNULL(name, '') <> 'foo'
Run Code Online (Sandbox Code Playgroud)


Mik*_*son 5

为什么这只返回第2行?第3行中的名称不是foo,应该返回.

其他人已经回答了该怎么做.至于为何如此,null代表一种未知的价值.第name3行中列的值可以foo.我们不知道因为价值未知.

where子句必须评估true为返回一行.name <> 'foo'不是true,它不是false未知的.