私の知る限り、少なくともSQL Serverでは、テーブルとの結合に使用されているセット内のテーブルのエイリアスを使用することはできません。
例:
CREATE TABLE A (A1 int, A2 int)
CREATE TABLE B (B1 int, B2 int)
SELECT a.A2
FROM
A as a
INNER JOIN
(SELECT * FROM B as b WHERE b.B1=a.A1) b2 ON b2.B2=a.A2
エイリアスが参照するテーブル( A )に結合されるセットでエイリアスaが使用されているため、このクエリはエラーになります。
SQL Serverでは、これはCROSS APPLYを使用するか、クエリを書き直すことで解決できます。(これは私の質問ではありません)。
私の質問は:なぜこの制限が存在するのですか?、SQL Server CROSS APPLYとしてエイリアスを使用してみませんか?
私の最初の推測は:並列処理です。これを制限できれば、結合されているように見える各セットを常に並行して計算してから結合することができます。しかし、それは単なる推測です。CROSS APPLYのように、より柔軟になり、エイリアスを使用して、結合セット間の依存関係を計算できるようになります。
多分理由はありません:)