Dans
FROM working_place wp
JOIN working_place_worker wpw ON ...
WHERE ...
le ON
la clause se réfère uniquement aux deux tables participant à la jointure, à savoir wp
et wpw
. Les noms de la requête externe ne lui sont pas visibles.
Le WHERE
clause (et sa cousine HAVING
est le moyen par lequel la requête externe est corrélée à la sous-requête. Les noms de la requête externe sont visible pour elle.
Pour faciliter la mémorisation,
- ON concerne le JOIN, la relation entre deux tables pour former une ligne (ou des lignes)
- WHERE concerne les critères de sélection, le test que les lignes doivent réussir
Bien que l'analyseur SQL admette des littéraux (qui ne sont pas des noms de colonne) dans la clause ON, il trace la ligne aux références aux colonnes en dehors de la jointure. Vous pourriez considérer cela comme une faveur qui protège contre les erreurs.
Dans votre cas, le wo
la table ne fait pas partie du JOIN
, et est rejeté. C'est c'est partie de l'ensemble de la requête, et est reconnu par WHERE
.