Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Filtro no Join ou na cláusula where? quais as diferenças e impactos?

Aprendemos que devemos fazer os filtros após a cláusula where, mas quando tratamos com joins às vezes temos resultados diferentes quando usamos uma condição(filtro) na cláusa where ou no proprio join, por exemplo tenho uma tabela chamada municipio com os campos municipio_id e populacao e uma tabela relatório com os campos relatorio_id, municipio_id e ano. A query é a seguinte eu quero trazer todos os municipios com a informação se o relatório referente ao ano de 2019 já foi feito:

select m.municipio_id,r.relatorio_id from municipio m left join  relatorio r on m.municipio_id = r.municipio_id where r.ano= 2019 

O resultado da query não foi o esperado, me trouxe apenas os municipios que não continham o relatorio_id nulo. Porém obtive o resultado esperado quando fiz:

select m.municipio_id,r.relatorio_id from municipio m left join  relatorio r on m.municipio_id = r.municipio_id and  r.ano= 2019 

e mais, se eu quiser agora aplicar um outro filtro por população por exemplo

select m.municipio_id,r.relatorio_id from municipio m left join  relatorio r on m.municipio_id = r.municipio_id and  r.ano= 2019 where m.populacao > 100000

Gostaria de saber qual a real diferença entre usar os filtros na cláusula where ou diretamente no join, e em que situação é recomendado usar um ou outro

1 resposta
solução!

bom, depois de tanto tempo e nenhuma resposta, eu mesmo respondo. Basicamente acontece que o filtro na clausula where acontece após o join , e utilizando apenas o and na clausula on, ele filtra antes do join