这两个SQL查询之间有什么区别 - SQL Server

时间:2011-12-06 21:43:15

标签: sql sql-server sql-server-2005 sql-server-2008 tsql

  

可能重复:
  Is it better to do an equi join in the from clause or where clause

我有两个SQL查询。你能解释一下这两者之间的区别吗?

QUERY:1

SELECT a.*, b.*
FROM Table1 a
INNER JOIN Table2 b
ON a.id = b.id
AND a.col = 'value'

QUERY:2

SELECT a.*, b.*
FROM Table1 a
INNER JOIN Table2 b
ON a.id = b.id
WHERE a.col = 'value'

由于

5 个答案:

答案 0 :(得分:4)

除非在数据库中启用区分大小写,否则

无效

答案 1 :(得分:2)

对于INNER JOIN,过滤JOIN条件与WHERE子句中的过滤应该会得到相同的结果。

如果这是OUTER JOIN,则结果会有所不同,因为第一个结果会在JOIN条件之前对源表中的结果进行预过滤。

答案 2 :(得分:1)

在这种特殊情况下它的结果是相同的,但它不是一回事。 WHERE适用于整个select,而ON ... AND仅适用于内连接(实际上可能是相同的,但不适用于外连接)

答案 3 :(得分:0)

是的,一切都差不多。如果您的ID字段拼写不正确,区分大小写的数据库将返回错误。

答案 4 :(得分:0)

区别在于纯粹的风格。就个人而言,我喜欢把执行表关键的子句连接到'JOIN ... ON a = b'部分下,并将与我的特定查询过滤有关的子句放在“WHERE”子句下。没有任何技术理由可以这样或那样做,只要你谈论内部联接。