Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

eriva_br

Enquete - join: full, left, inner e right

Preferência de joins  

29 votos

  1. 1. Onde você prefere realizar os joins?

    • Na cláusula FROM
      19
    • Na cláusula WHERE
      5


Recommended Posts

JOIN's (Junções) no SQL Server, são permitidas nas claúsulas FROM e WHERE, é recomendado o uso na cláusula FROM por questões de performance e melhor organização do código.

 

vejamos um simples exemplo de join com inner, left, right e full:

 

Dados para os Testes:

declare @table1 table (cod char(1))	  declare @table2 table (cod char(1))	  	  insert into @table1 (cod) values ('A')	  	  insert into @table2 (cod) values ('B')	  insert into @table1 (cod) values ('B')	  	  insert into @table2 (cod) values ('C')
Select da tabela 1 e tabela 2:

print 'TABELA 1'	  select * from @table1	  print 'TABELA 2'	  select * from @table2
resultado:

TABELA 1

cod

----

A

B

 

(2 row(s) affected)

 

TABELA 2

cod

----

B

C

 

(2 row(s) affected)

IMPORTANTE: Observer que o código "B" aparece nas tuas tabelas, o código "A" somente na tabela 1 e o código "C" somente na tabela 2

 

 

 

Junções na cláusula FROM:

print 'INNER JOIN --> somente mostra o que esta na table1 e table2 com a mesma chave'	  select * from @table1 t1	  inner join @table2 t2 on t1.cod = t2.cod
retorna:

cod cod

---- ----

B B

 

(1 row(s) affected)

print 'LEFT JOIN --> mostra o que esta na table1 e table2 com a mesma chave e tudo o que esta somente na table1'	  select * from @table1 t1	  left join @table2 t2 on t1.cod = t2.cod
retorna:

cod cod

---- ----

A NULL

B B

 

(2 row(s) affected)

print 'RIGHT JOIN --> mostra o que esta na table1 e table2 com a mesma chave e tudo o que esta somente na table2'	  select * from @table1 t1	  right join @table2 t2 on t1.cod = t2.cod
retorna:

cod cod

---- ----

B B

NULL C

 

(2 row(s) affected)

print 'FULL JOIN --> mostra os dados das duas tabelas table1 e table2'	  select * from @table1 t1	  full join @table2 t2 on t1.cod = t2.cod
retorna:

cod cod

---- ----

B B

NULL C

A NULL

 

(3 row(s) affected)

junções na cláusula WHERE:

 

print 'INNER JOIN = --> somente mostra o que esta na table1 e table2 com a mesma chave'	  select * from @table1 t1, @table2 t2	  where t1.cod = t2.cod
retorna:

cod cod

---- ----

B B

 

(1 row(s) affected)

print 'LEFT JOIN *= --> mostra o que esta na table1 e table2 com a mesma chave e tudo o que esta somente na table1'	  select * from @table1 t1, @table2 t2	  where t1.cod *= t2.cod
retorna:

cod cod

---- ----

A NULL

B B

 

(2 row(s) affected)

print 'RIGHT JOIN =* --> mostra o que esta na table1 e table2 com a mesma chave e tudo o que esta somente na table2'	  select * from @table1 t1, @table2 t2	  where t1.cod =* t2.cod
retorna:

cod cod

---- ----

B B

NULL C

 

(2 row(s) affected)

AUTOR: "eriva_br"

 

Dúvidas, criticas, contribuições, correções e adições seram bem vindas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala gde eriva_br!

 

 

Bom votei no WHERE pq aqui onde trabalho o pessoa do AD só aceita desta forma. Acho que qdo começaram a desenvolver fizeram no WHERE e ficou com padrão. Por isso acabo fazendo no WHERE pq se fizer no FROM qdo for para produção tenho de mudar.

 

Eu prefiro no FROM pois como já discutimos antes por questões de organização, performance e facilitar a manutenção. E claro os acadêmicos adoram.

 

Só uma ressalva. Se o desenvolvedor for desleixado msm no FROM o JOIN fica complicado. Por isso no seja no FROM seja no WHERE comente e seja organizado.

 

Agora conheci um DBA que trabalhava comigo (o bixo tinha mestrado, doutorado e era certificado) tirava a maior onda dizia que não gastou dinheiro estudando para utilizar JOIN em WHERE. Bom despois descobri que qdo ele tinha que criar um JOIN no FROM ele criava as tabelas no Access e gerava na grede QBE via o assitente. http://forum.imasters.com.br/public/style_emoticons/default/yay.gif Ai fica fácil!

 

Bom seja qual for a opção escolhida utilize a que você achar mais confortável e lembre-se de tentar criar expressões robustas, documentadas e exutas.

 

 

 

t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos lah, como postei em outro forum:

 

"

opa opa.. salve ^^

votei no FROM

=)

 

Seguinte..

Em questao de performance q é o que mais pega para os DBAs.

 

A sintaxe JOIN utilizada no FROM, tem uma pequena vantagem em relação ao WHERE, devido ao sistema de alocação de dados (gravação no .LOG) do SQL

Claro que com o where o código fica bem mais limpo, mas dependendo da "qtde" de joins, tabelas, views, sps a performance conta muito, principamente em aplicações criticas [a minha é :( ] sou obrigado a usar o from ^^

 

abs galera

"

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, fiquei com dúvida em relação ao seguinte:

 

'INNER JOIN --> somente mostra o que esta na table1 e table2 com a mesma chave'	  select * from @table1 t1	  inner join @table2 t2 on t1.cod = t2.cod	  'FULL JOIN --> mostra os dados das duas tabelas table1 e table2'	  select * from @table1 t1	  full join @table2 t2 on t1.cod = t2.cod

A descrição, comenta que os dados retornam das duas tabelas.

A minha dúvida é, o FULL JOIN retorna dados, que tenham a mesma chave??

Compartilhar este post


Link para o post
Compartilhar em outros sites

A minha dúvida é, o FULL JOIN retorna dados, que tenham a mesma chave??

o full join retorna todos os dados mesmo que não tenham as mesmas chaves, agora coloquei o resultado logo abaixo da execução, qq. coisa abra o query analyser e faça os testest+

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.