严格来说,两种形式之间查询优化器的输入有所不同:
-- Input tree (ISO-89)
SELECT
p.Name,
Total = SUM(inv.Quantity)
FROM
Production.Product AS p,
Production.ProductInventory AS inv
WHERE
inv.ProductID = p.ProductID
GROUP BY
p.Name
OPTION (RECOMPILE, QUERYTRACEON 8605, QUERYTRACEON 3604);
-- Input tree (ISO-92)
SELECT
p.Name,
Total = SUM(inv.Quantity)
FROM Production.Product AS p
JOIN Production.ProductInventory AS inv ON
inv.ProductID = p.ProductID
GROUP BY
p.Name
OPTION (RECOMPILE, QUERYTRACEON 8605, QUERYTRACEON 3604);
如您所见,ON
子句谓词使用现代语法紧密绑定到连接。使用较旧的语法时,存在逻辑交叉联接,后跟关系选择(行过滤器)。
查询优化器几乎总是在优化过程中将关系选择折叠到联接中,这意味着这两种形式很可能会产生等效的查询计划,但是并没有实际的保证。