I
FROM working_place wp
JOIN working_place_worker wpw ON ...
WHERE ...
ON
klausul henviser kun til de to tabeller, der deltager i joinforbindelsen, nemlig wp
og wpw
. Navne fra den ydre forespørgsel er ikke synlige for den.
WHERE
klausul (og dens fætter HAVING
er den måde, hvorpå den ydre forespørgsel er korreleret til underforespørgslen. Navne fra den ydre forespørgsel er synlig for den.
For at gøre det nemt at huske,
- ON handler om JOIN, hvordan to tabeller relaterer sig til at danne en række (eller rækker)
- HVOR handler om udvælgelseskriterierne, testen rækkerne skal bestå
Mens SQL-parseren tillader bogstaver (som ikke er kolonnenavne) i ON-sætningen, trækker den linjen ved referencer til kolonner uden for joinforbindelsen. Du kunne betragte dette som en tjeneste, der beskytter mod fejl.
I dit tilfælde er wo
tabellen er ikke en del af JOIN
, og bliver afvist. Det er del af hele forespørgslen og genkendes af WHERE
.