QUAL DIFEREN?A DESSES DOIS SELECT, IMPLICA EM QUE?

JCM0867 18/10/2015 20:10:53
#452682
Olá pessoal, vejam os dois Select:

Select a.Produto, a.Descricao, a.CodValor, b.ValorDescricao
From Tabela1 a, Tabela2 b
Where a.CodValor = b.CodValor

Select a.Produto, a.Descricao, a.CodValor, b.ValorDescricao
From Tabela1 a
Inner Join Tabela2 b On a.CodValor = b.CodValor

Ambos os select produzem o mesmo resultado
Qual diferença? um é mais rápido que o outro ou não?

Sei que dependendo do caso precisa usar o Left Join e Right Join que complicaria fazer o mesmo com Where, mas o inner Join?
KERPLUNK 18/10/2015 20:19:13
#452683
A primeira, é um LEFT JOIN, a segunda obviamente é um INNER JOIN. A figura abaixo mostra como isso é:
http://i.stack.imgur.com/VQ5XP.png
JABA 18/10/2015 20:35:09
#452684
Na minha opinião, na há diferença alguma, tanto em performance quanto na extração dos dados.
SINCLAIR 19/10/2015 08:30:46
#452691
Colega,

Fiz medições seguindo o left join, que é implícito no primeiro SQL que você postou.

Usei PostGres 9.3 com duas tabelas, sendo a principal com 100.000 (contas) registros e a segunda com aproximadamente 400.000 registros (histórico das contas).

O segundo SQL ganhou por pouco mais de nada, coisa de milessegundos (nem se pode dizer que era na velocidade das Querys porque pode ser algum momento em que o computador tenha sido aliviado de algum procedimento interno).

No PGAdmin III desenhei a query visualmente, ao invés de digitar como sempre faço, para ver qual o modo que o PGAdmin III sugere. Não sei se desenhei corretamente, se inseri os parâmetros corretamente para o builder formar a Query, mas enfim: sugeriu da primeira forma (eu particulamente uso sempre da segunda forma).

Tudo de bom!
FFCOUTO 19/10/2015 11:13:14
#452703
JCM0867,

A diferença entre os dois é bem simples.

No primeiro Select apenas os dados da tabela A serão exibidos. Os dados da tabela B só serão exibidos caso haja correspondência dos campos relacionados. Isso pode resultar num valor NULO para o campo b.Descricao, o que pode ocasionar erros na aplicação.

No segundo Select os dados de ambas as tabelas serão exibidos, se e somente se, ocorrer a correspendência dos campos relacionados.
JCM0867 19/10/2015 13:29:58
#452715
Citação:

:
JCM0867,

A diferença entre os dois é bem simples.

No primeiro Select apenas os dados da tabela A serão exibidos. Os dados da tabela B só serão exibidos caso haja correspondência dos campos relacionados. Isso pode resultar num valor NULO para o campo b.Descricao, o que pode ocasionar erros na aplicação.

No segundo Select os dados de ambas as tabelas serão exibidos, se e somente se, ocorrer a correspendência dos campos relacionados.



O dois selects produzem o mesmo resultado.
Mas a pergunta não é essa, quero saber sobre PERFORMACE, usar Joins ou wheres tem o mesmo tempo de resposta?
JABA 19/10/2015 13:45:24
#452717
Por que vocês acham que a primeira é um LEFT JOIN?
OCELOT 19/10/2015 13:58:59
#452718
Resposta escolhida
Os dois são INNER JOIN, sendo o primeiro implícito e o segundo explicito.

Não existe como te dar uma resposta exata afinal você não disse qual banco de dados e versão que está usando, mas eu diria que na maioria dos bancos de dados modernos não faz diferença nenhuma, o que você precisa fazer é verificar o plano de execução das duas SQLs, isso varia de um banco de dados para outro, mas o mais provável é que as duas SQLs gerem exatamente o mesmo plano de execução.

O mais recomendado eu diria que é usar mesmo o modo explicito, pois ele é padronizado pela ANSI e pessoalmente eu acho ele melhor para se ler, pois separa o JOIN da cláusula WHERE.
JABA 19/10/2015 14:14:43
#452720
OCELOT, concordo plenamente. Os dois casos são a mesma coisa.
JCM0867 19/10/2015 20:22:25
#452738
Logico que o exemplos que dei são bastante simples, fiz assim só para explicar a minha duvida.
tenho queres aqui com mais de 15 joins, funcionando 100%, gostaria de saber se valeria apena tirar algumas e substituir por where.
uma vez li não sei onde que o Join só teria boa performance só se forem entre tabelas indexadas
Uso SQL Server express 2014
JABA 19/10/2015 20:41:21
#452739
Se você substituir esses 15 JOINS pela primeira opção, na minha opinião, será como trocar seis por meia dúzia.
Página 1 de 2 [11 registro(s)]
Tópico encerrado , respostas não são mais permitidas