SQL Server两个查询之间的区别

时间:2013-05-10 18:24:58

标签: sql sql-server

我想知道以下两个查询中JOIN行为的不同。

比方说,我有一个查询

SELECT * 
FROM   table1 t1 
       LEFT JOIN table2 t2 
              ON t1.column1 = t2.column2 
                 AND t2.something = 'this thing' 
WHERE some other conditions


SELECT * 
FROM   table1 t1 
       LEFT JOIN table2 t2 
              ON t1.column1 = t2.column2 
WHERE some other conditions AND t2.something = 'this thing'

我无法通过将条件从join语句移到where子句来描绘它的不同之处。

1 个答案:

答案 0 :(得分:1)

在您的第一个查询中,只有t2t2.something = 'this thing'将加入T1的记录,但将包含不具有匹配t1记录的任何t2记录。

在第二个查询中,t2中的所有记录都会加入t1,但只会记录t2.something = 'this thing'将包含在最终结果中的位置。

将条件t2.something = 'this thing'添加到WHERE子句有效地删除了t2中没有匹配项的所有结果(因为在这种情况下t2.something将是NULL)。从逻辑上讲,它与INNER JOIN相同。