为什么 SQL 忽略我的 WHERE 子句中的条件?

Why is SQL ignoring the conditions in my WHERE clause?

出于某种原因,当我通过以下查询时:

SELECT [313], [313 DE MINIMIS LIMIT] 
FROM [Chem CAS INV] 
WHERE [313 DE MINIMIS LIMIT] IS NULL AND 313 = '313'

SQL 服务器正在返回明显不符合指定条件的行,如下所示:

我知道有时使用 NULL 可能需要更深入地了解 SQL 的工作原理(例如在 IN 语句中使用 IS NOT NULL 与 NOT EXISTS 等),但我已经像这样多次使用 NULL 进行简单检查,我不明白为什么 313 会忽略对字符串值的简单检查。

我正在使用 SQL Server 2014 Express,以下是这些列的数据类型:

我觉得我错过了一些明显的东西,但我不明白那会是什么。

313 = '313' 匹配,因为 SQL 认为您指的是 NUMBER 313 而不是您的列 [313]。您需要像执行其余查询一样将其括在方括号中。作为旁注,这就是为什么将列命名为 NUMBER 是完全疯狂的原因之一。您将不断遇到这些错误。将其重命名为合理的名称,例如 Val_313 或 某物 等。您应该将括号视为 SQL 服务器的说法:"Are you sure you want to do this?" 99.99% 的时间您的回答应该是:否。 :)