Join中Where和Condition条件的区别

sta*_*ium 2 sql-server left-join conditional-statements

任何人都可以向我解释为什么以下两个查询产生不同的结果?

SELECT
    o.*
FROM
    Customer c
LEFT JOIN 
    [Order] o ON o.CustomerID = c.CustomerID AND o.OrderType = 'Cash'
WHERE
    c.Country = 'USA'

SELECT
    o.*
FROM
    Customer c
LEFT JOIN 
    [Order] o ON o.CustomerID = c.CustomerID
WHERE
    c.Country = 'USA'
AND
    o.OrderType = 'Cash'
Run Code Online (Sandbox Code Playgroud)

谢谢.

Gre*_*reg 5

第一个允许订单为NULL,因为它是左连接.
第二个没有,因为它在连接后检查o.OrderType的值.

等价物是(假设OrderType不能为NULL)

SELECT
    o.*
FROM
    Customer c
LEFT JOIN 
    [Order] o ON o.CustomerID = c.CustomerID
WHERE
    c.Country = 'USA'
AND
    (o.OrderType = 'Cash' OR o.OrderType IS NULL)
Run Code Online (Sandbox Code Playgroud)