ON句がJOIN句よりも先に評価されるのは本当ですか？


以下のWebページによると、ON句がJOIN句よりも先に評価されるそうです。  
[SELECT (Transact-SQL)](https://technet.microsoft.com/ja-
jp/library/ms189499\(v=sql.110\).aspx) <https://technet.microsoft.com/ja-
jp/library/ms189499(v=sql.110).aspx>  
しかし、JOIN句に別名を付したときその別名はON句でも使用できます。  
例: `select * from data d inner join mst m on m.num=d.num`  
評価順序の関係でSELECT句に付した別名がWHERE句で使用できないことに対応するのであれば、JOIN句→ON句の順に評価されているのではないでしょうか。




論理的な処理としては`JOIN`～`ON`の評価は以下の三段階に分かれています。

  1. `JOIN`句のテーブルを評価し、直積を求める。(≒`CROSS JOIN`)
  2. `ON`句の条件に該当しない行を除外する。
  3. `OUTER JOIN`である場合は必要な未結合の行を追加する。

ですので評価の開始はかならず`JOIN`が先なのですが、完了順では遅くなる場合があります。またこの場合は`ON`の評価に使用した行とは異なる結果が出力されます。TechNetの記述はバインド順についての言及であるので、結果セットの確定タイミングを踏まえて`JOIN`を後ろにしているのではないでしょうか。

なお詳細な評価プロセスはMicrosoftが出版しているリファレンスである『T-SQL
Qerying』で説明されています。当該書籍に説明されている`SELECT`文の完全な評価フローは以下のようになります。[![T-SQL Logical
Query Processing
Flow](https://i.stack.imgur.com/MIbtv.png)](https://i.stack.imgur.com/MIbtv.png)




論理的な処理としては`JOIN`～`ON`の評価は以下の三段階に分かれています。

  1. `JOIN`句のテーブルを評価し、直積を求める。(≒`CROSS JOIN`)
  2. `ON`句の条件に該当しない行を除外する。
  3. `OUTER JOIN`である場合は必要な未結合の行を追加する。

ですので評価の開始はかならず`JOIN`が先なのですが、完了順では遅くなる場合があります。またこの場合は`ON`の評価に使用した行とは異なる結果が出力されます。TechNetの記述はバインド順についての言及であるので、結果セットの確定タイミングを踏まえて`JOIN`を後ろにしているのではないでしょうか。

なお詳細な評価プロセスはMicrosoftが出版しているリファレンスである『T-SQL
Qerying』で説明されています。当該書籍に説明されている`SELECT`文の完全な評価フローは以下のようになります。[![T-SQL Logical
Query Processing
Flow](https://i.stack.imgur.com/MIbtv.png)](https://i.stack.imgur.com/MIbtv.png)

