"On" 离开加入顺序

"On" left join order

我已经阅读了 20 多篇标题相似的帖子,但未能找到答案,如果有答案,请提前致歉。

我一直相信

select * FROM A LEFT JOIN B on ON A.ID = B.ID

相当于

select * FROM A LEFT JOIN B on ON B.ID = A.ID

但今天被告知“既然你有左连接,你必须将它作为 A = B,因为翻转后它将充当内连接。

这是真的吗?

告诉您的人不了解 JOIN 和连接条件的工作原理。 He/She 是完全错误的。

表的顺序对左连接很重要。 a left join bb left join a不同,但是join的顺序condition是没有意义的

A.ID = B.ID 是表连接的条件,returns TRUEFALSE
由于 equality(=) 是 commutative,因此操作数的顺序不影响结果。

它们完全不正确,证明起来很简单。

DECLARE @A TABLE (ID INT)
DECLARE @B TABLE (ID INT)

INSERT INTO @A(ID) SELECT 1
INSERT INTO @A(ID) SELECT 2

INSERT INTO @B(ID) SELECT 1

SELECT *
FROM @A a
LEFT JOIN @B b ON a.ID=b.ID

SELECT *
FROM @A a
LEFT JOIN @B b ON b.ID=a.ID

表的顺序很重要(A Left JOIN B 与 B LEFT JOIN A),如果使用 OR,连接条件组的顺序很重要(A=B OR A IS NULL AND A IS NOT NULL -始终在 OR 中使用括号),但在条件组中(例如 a.ID=b.ID)无关紧要。