In
FROM working_place wp
JOIN working_place_worker wpw ON ...
WHERE ...
de ON
clausule verwijst alleen naar de twee tafels die deelnemen aan de join, namelijk wp
en wpw
. Namen uit de buitenste query zijn er niet voor zichtbaar.
De WHERE
clausule (en zijn neef HAVING
is de manier waarop de buitenste query wordt gecorreleerd met de subquery. Namen uit de buitenste zoekopdracht zijn er zichtbaar voor.
Om het gemakkelijk te onthouden,
- ON gaat over de JOIN, hoe twee tabellen zich verhouden tot een rij (of rijen)
- WAAR gaat het over de selectiecriteria, de test die de rijen moeten doorstaan
Hoewel de SQL-parser letterlijke waarden (die geen kolomnamen zijn) toelaat in de ON-component, trekt hij de lijn bij verwijzingen naar kolommen buiten de join. Je zou dit kunnen zien als een gunst die behoedt voor fouten.
In jouw geval, de wo
tabel maakt geen deel uit van de JOIN
, en wordt afgewezen. Het is onderdeel van de hele zoekopdracht, en wordt herkend door WHERE
.