Pelo que sei, o cross join (,) é o cruzamento de todas as linhas da tabela, daí surgiu a seguinte dúvida:
Dados estes exemplos, há alguma diferença no custo de execução de cada sentença?
SELECT * FROM tabela1, tabela2 WHERE tabela1.cod = tabela2.cod
SELECT * FROM tabela1 INNER JOIN tabela2 ON tabela1.cod = tabela2.cod
Tipo, o select executa mais rápido com inner join?
pelo que eu sei é a mesma coisa (eu não sou nenhum DBA, mas que eu saiba o banco substitui um pelo outro antes de executar)… abre a sua IDE preferida pro banco que você esta usando, testa ai com as tabelas que você esta indo selecionar…
tb ñ sou dba tb.
Pelo que já ouvi falar o correto é usar o JOIN pois o banco foi preparado para utilizar JOIN, quando vc faz a query tudo no where o banco converte para o JOIN e depois executa aumentando o tempo do que simplemeste executar(join).
Outra coisa é caso vc precise passar o INNER JOIN para LEFT JOIN é facil é só alterar, porem se a query tiver só no WHERE vc tera que converter para o uso do JOIN, tendo que fazer a query novamente. (apesar que no oracle vc consegue fazer left join simplesmente colocando o + na condição do cross join)
Então, eu pensei no seguinte, não sei se é o certo, mas quando vc coloca tabela1,tabela2 vc está fazendo um produto cartesiano entre todas as linhas e só no WHERE você filtra. Já utilizando o INNER JOIN você já filtra os dados antes do WHERE através da cláusula ON. Essa é minha opinião e só queria uma confirmação se estou certo ou não…
Sim, sua opnião está certa e tem certos wheres q vc pode colocar no join (como AND) e fica mais rápido ainda dependendo se houverem muitas tabelas ligadas
tipo liando tabela a, b e c
select * from a
inner join b
on a.b = b.codigo
and b.active = true
inner join c
on b.c = c.codigo
neste caso o C só é ligado quando o b for ligado, acelera o select, ganhei uns 5 mins em uma SQL (de 15 mins) por causa de tips como esse
[quote=heroijapa]Sim, sua opnião está certa e tem certos wheres q vc pode colocar no join (como AND) e fica mais rápido ainda dependendo se houverem muitas tabelas ligadas
tipo liando tabela a, b e c
select * from a
inner join b
on a.b = b.codigo
and b.active = true
inner join c
on b.c = c.codigo
neste caso o C só é ligado quando o b for ligado, acelera o select, ganhei uns 5 mins em uma SQL (de 15 mins) por causa de tips como esse[/quote]
Isso mesmo. Hoje eu fiz uma dessas, refatorei uma sql que tinha vários CROSS JOIN (,) mas ganhei só 1 seg. de diferença.