Qual a principal diferença no CROSS JOIN e o INNER JOIN [RESOLVIDO]

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.

Devido a grande velocidade atual dos processadores a forma de indices utilizadas pelas máquinas é quase impreceptível.

:wink:

abrass