在最近的代码审查中,我被要求更改
Amount > 0
to
ISNULL(Amount,0) > 0
是否有可能获得不同的结果?据我所知,如果Amount为null或0,则它们都将返回false;在其他情况下,它们都将返回true
将任何内容与null进行比较都会导致NULL而不是false。
这实际上与返回false的效果相同,因为查询将仅返回数量不为null且大于0的行,但是您应注意不要假设,当数量为null时比较的结果为false
例如,这也将无法返回空行:
WHERE NOT(amount > 0)
amount > 0
为NULL不为假。如果为假,则NOT不能将其设为真]
[您可能会认为NULL是一种污染物,它遍历它所接触的每个条件和操作,并将其全部变为NULL,然后在最后一刻“变成错误”,就这样]
amount > 0
检查amount
是否严格大于0
。如果值为NULL
,则条件返回null
(不是true
,但实际上不是false
)。
ISNULL(amount, 0) > 0
做同样的事情。 NULL
的值变为0
,这也会使检查失败-但是,在这种情况下,将返回false
而不是null
。