AND NOT (T.DET_ERP_STATUS = '1' AND (T.OUT_QTY = 0 OR T.IS_SERBP = 'X'))
由于 T.IS_SERBP 会存在 NULL 值,上述写法会将 T.IS_SERBP 为 NULL 的数据也过滤掉
在 Oracle(以及大多数 SQL 数据库)中,当 T.IS_SERBP 为 NULL 时,表达式 T.IS_SERBP = 'X' 的结果是 UNKNOWN(不是 TRUE 也不是 FALSE)。这会导致整个逻辑判断出现“意外过滤”。
问题根源:NULL 在布尔逻辑中的行为,以下为 AI 解读




