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

Voi*_*ing -1 sql database sql-server sql-server-2014-express

出于某种原因,当我传递以下查询时:

SELECT [313], [313 DE MINIMIS LIMIT] 
FROM [Chem CAS INV] 
WHERE [313 DE MINIMIS LIMIT] IS NULL AND 313 = '313'
Run Code Online (Sandbox Code Playgroud)

SQL Server返回的行明显与指定的条件不匹配,如下所示:

在此输入图像描述

我知道有时使用NULL可能需要更深入地了解SQL的工作方式(比如使用IS NOT NOT NULL与IN语句和NOT EXISTS等),但我已经用NULL这样多次做了简单的检查,我无法理解为什么313会忽略对字符串值的简单检查.

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

在此输入图像描述

我觉得我错过了一些明显的东西,但我无法理解它会是什么.

aqu*_*nas 7

313 = '313'是匹配因为SQL认为你的意思是NUMBER 313而不是你的专栏[313].您需要将其包装在括号中,就像查询的其余部分一样.作为旁注,这就是为什么命名列NUMBER完全疯狂的一个原因.你会经常遇到这些错误.重命名像Val_313或其他东西一样合理的东西.您应该将括号视为SQL Server的说法:"您确定要执行此操作吗?" 99.99%的时间你的回答应该是:没有.:)