(すでにmaisumakunさんの正しいご回答にベストアンサーをつけていらしていますが、横から並行して補足させていただきます)
select * from tb1 join tb2 on id1=id2 where ...
は
select * from tb1 join tb2 on id1=id2
まで (where 句の前まで) の結果セットに対して where 句は働きます。
すなわち tbl1 と tbl2 が結合した結果のデータに対して、です。
ちなみに group by、 having、 order by も、まさしくSQL文で書かれる位置順に論理的な処理が行われます。
SQL
1SELECT TBL1.SHOPID, TBL1.NAME, COUNT(*)
2FROM TBL1
3INNER JOIN TBL2 ON TBL2.ID = TBL1.ID
4WHERE TBL1.DEPTID IN (1021,1025) AND TBL2.HIREDATE IS NOT NULL
5GROUP BY TBL1.SHOPID, TBL1.NAME
6HAVING COUNT(*) > 0
7ORDER BY TBL1.SHOPID
上記例では
0. TBL1が取り出される。
0. 1.の結果へTBL2が互いのID列の一致で結合される。
0. 2.の結果へWHERE句で指定された条件に合った行だけに絞られる。
0. 3.の結果へTBL1.SHOPIDでグループ化される。
0. 4.の結果へHAVING句で指定された条件に合った行だけに絞られる。
0. 5.の結果へTBL1.SHOPIDの昇順で並び替えられる。
の順で論理的に処理されます。つまり、それぞれの句は、直前の結果が対象です。
物理的(内部的)には、上記の論理的な処理を満たすことを前提にしながら、より速く結果をだせるよう「最適化」された順番で、ディスクアクセスや計算処理などが行われます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。