Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Visibilidade da diferença na junção da subconsulta e onde


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 .