これらのスクリプトは私に同じ結果を与えます
SELECT * FROM
(select x = null) x
OUTER APPLY
(select x = 1) y
SELECT * FROM
(select x = null) x
CROSS APPLY
(select x = 1) y
CROSS APPLY
とOUTER APPLY
同じですか ?
同じ結果が返されない状況の例はありますか?
これらのスクリプトは私に同じ結果を与えます
SELECT * FROM
(select x = null) x
OUTER APPLY
(select x = 1) y
SELECT * FROM
(select x = null) x
CROSS APPLY
(select x = 1) y
CROSS APPLY
とOUTER APPLY
同じですか ?
同じ結果が返されない状況の例はありますか?
区別を理解しやすくするために、INNER JOIN(CROSSの場合)とLEFT JOIN(OUTERの場合)を考えてください。CROSSは、適用された関数が結果セットを返す外部テーブルからの行のみを返します。OUTERは、外部テーブルからすべての行を返します。
これは、同じ結果が返されない状況です。ちなみに、APPLYを使用するのは、前のテーブル/サブクエリを次のテーブル/サブクエリと関連付ける必要がある場合のみです。
SELECT x.x, y.x y
FROM (select [x] = 1) x
OUTER APPLY (select [x] = 1 where x.x is null) y
-- result
1, null
SELECT x.x, y.x y
FROM (select [x] = 1) x
CROSS APPLY (select [x] = 1 where x.x is null) y
-- result
(empty result set)
OUTER APPLYは、OUTERJOINがINNERJOINに何であるかをクロスアプライすること
です