Dentro
FROM working_place wp
JOIN working_place_worker wpw ON ...
WHERE ...
o
ON
cláusula refere-se somente para as duas tabelas que participam da junção, ou seja, wp
e wpw
. Os nomes da consulta externa não são visíveis para ela. O
WHERE
cláusula (e seu primo HAVING
é o meio pelo qual a consulta externa é correlacionada à subconsulta. Os nomes da consulta externa são visível para ele. Para facilitar a memorização,
- ON é sobre o JOIN, como duas tabelas se relacionam para formar uma linha (ou linhas)
- WHERE é sobre os critérios de seleção, o teste que as linhas devem passar
Embora o analisador SQL admita literais (que não são nomes de coluna) na cláusula ON, ele desenha a linha nas referências às colunas fora da junção. Você pode considerar isso como um favor que protege contra erros.
No seu caso, o
wo
tabela não faz parte do JOIN
, e é rejeitado. É é parte de toda a consulta e é reconhecido por WHERE
.