ISNULL 错误 return?

ISNULL erroneous return?

我有以下查询:

SELECT apps.Field4,
       ISNULL(apps.field4, '-1')
FROM   applications apps
WHERE  apps.OBJECT_ID = 1727847
       AND ISNULL(apps.Field4, -1) = -1 

apps.field4是一个整数,field4.

没有小于0的记录

上述查询的 return 值为:

+------+----+
| NULL | -1 |
+------+----+

但是如果我将 AND apps.field4 is NULL 添加到 where 子句,则不会 returned:

SELECT apps.Field4,
       ISNULL(apps.field4, '-1')
FROM   applications apps
WHERE  apps.OBJECT_ID = 1727847
       AND apps.field4 IS NULL
       AND ISNULL(apps.Field4, -1) = -1 

为什么 ISNULL 似乎可以正确识别 NULL 值,但 IS NULL 却不能?

我知道我不是在回答你的问题。但是,我在 MSDN 中发现了一些有趣的东西:

C。在 WHERE 子句中测试 NULL 不要使用 ISNULL 来查找 NULL 值。请改用 IS NULL。以下示例查找重量列中具有 NULL 的所有产品。注意 ISNULL 之间的 space。

USE AdventureWorks2012;
GO
SELECT Name, Weight
FROM Production.Product
WHERE Weight IS NULL;
GO

https://msdn.microsoft.com/en-us/library/ms184325.aspx

问题似乎是数据库损坏。最后我要么使用 DBCC CHECKDB 要么 DBCC CHECKTABLE 来解决问题,问题就消失了。