質問: 以下のWebページによると、ON句がJOIN句よりも先に評価されるそうです。 SELECT (Transact-SQL).aspx) しかし、JOIN句に別名を付したときその別名はON句でも使用できます。 例: `select * from data d inner join mst m on m.num=d.num` 評価順序の関係でSELECT句に付した別名がWHERE句で使用できないことに対応するのであれば、JOIN句→ON句の順に評価されているのではないでしょうか。
回答: SQLはインタプリタではないので、構文解析をすることと式を評価することは別です。 > > > ``` > select * from data d inner join mst m on m.num=d.num > > ``` > > 構文解析中に`data`テーブルに`d`と名を付け、`mst`テーブルに`m`を名を付けた上で、実行時に`m.num`と`d.num`にアクセスしているに過ぎません。 > > 評価順序の関係でSELECT句に付した別名がWHERE句で使用できないことに対応する > > > わけではありません。`SELECT`句でカラムに名前を付けたとしても、実行時、`WHERE`句の段階ではまだ`SELECT`句が実行されておらず値が存在しないためにアクセスできないだけです。