SQL server中的“”不返回空值行

SQL server中的“”不返回空值行,sql,sql-server,tsql,Sql,Sql Server,Tsql,我在SQL server中有下表_1: 表中有以下值 我使用下面的查询来获取没有“Thakker”作为姓氏的记录 但这只是第三排。我希望它会返回第二行和第三行 为什么它不返回第二排 请为列LastName添加ISNULL检查,以在select中包含NULL值 SELECT [id] ,[FirstName] ,[LastName] FROM [dbo].[Table_1] WHERE ISNULL(LastName,'') <> 'Thakker' 您可以

我在SQL server中有下表_1:

表中有以下值

我使用下面的查询来获取没有“Thakker”作为姓氏的记录

但这只是第三排。我希望它会返回第二行和第三行

为什么它不返回第二排

请为列LastName添加ISNULL检查,以在select中包含NULL值

SELECT [id]
      ,[FirstName]
      ,[LastName]
FROM [dbo].[Table_1] 
WHERE ISNULL(LastName,'') <> 'Thakker'

您可以使用此查询

SELECT [id],
       [FirstName],
       [LastName],
  FROM [dbo].[Table_1] WHERE LastName <> 'Thakker' OR LastName IS NULL
根据您的问题,运算符不返回空值行,因为 运算符对两个值进行比较,所以要进行比较,应该有两个值,但


NULL不是一个值。它只是一个占位符,表示不存在任何值。即使NULL也不等于NULL。这就是为什么SQL在这种情况下是空的,而不是空的

有没有其他方法可以在不检查每一行的姓氏的ISNULL的情况下也得到NULL值的行?@JigneshThakker使用case语句,请检查编辑后的答案。ISNULL如何处理索引?我想说,您的第一个解决方案将阻止索引的使用…为什么它不返回第二行?
SELECT [id]
      ,[FirstName]
      ,[LastName]
FROM [dbo].[Table_1] 
WHERE 1=CASE WHEN LastName='Thakker' THEN 0 ELSE 1 END
SELECT [id],
       [FirstName],
       [LastName],
  FROM [dbo].[Table_1] WHERE LastName <> 'Thakker' OR LastName IS NULL