嵌套 isNull 查询中的 where 子句给出意外结果

where clause in nested isNull query giving unexpected result

下面的查询 returns 大约 200000 个结果。

此查询中嵌套 where 子句的工作不是很清楚,即它在图片中的什么位置?

如果我注释掉 isNull 中的 where 子句,那么我会得到 0 个结果,这很好并且符合预期,因为 Max(invoiceID) 在加入后不为空。

select * from CustomerServices where isNull((
                                SELECT MAX(invoiceid) 
                                FROM Invoices 
                                    LEFT JOIN InvoicesHistory
                                        ON InvoicesHistory.ServiceHistoryID = Invoices.ServiceHistoryID 
                                WHERE serviceID = Invoices.serviceID
                            ),0)=0

如果您希望我添加更多信息,请告诉我。

我想你只是想要 not exists:

select cs.*
from CustomerServices cs
where not exists (select 1
                  from Invoices i left join
                       InvoicesHistory ih
                       on ih.ServiceHistoryID = i.ServiceHistoryID 
                  where cs.serviceID = i.serviceID
                 );

在你的例子中,嵌套的 WHERE 子句没有做任何事情。相当于:

Invoices.serviceID = Invoices.serviceID

根据 SQL 中的范围规则。这很可能是一个相关子句,因此需要一个限定的列名。