none
Inner Join | Dúvidas e Melhores práticas RRS feed

  • Pergunta

  • Olá,
    Tenho feito muito o uso de inner joint e estou com algumas dúvidas.
    Imagina que eu tenho que fazer a relação de 4 tabelas.
    Com o uso do inner joint eu preciso relacionar todas com todas ou posso ir relacionando uma com uma, outra com outra e por aí vai?

    Exemplo abaixo:

    select *
    from
    	tabela A
    	inner join tabela B on B.ID = A.ID
    	inner join tabela C on C.ID = B.ID2
    	inner join tabela D on D.ID = C.ID3

    Eu relacionei tabela 1 com tabela 2, tabela 2 com tabela 3 e tabela 3 com tabela 4.
    É isto?
    Ou eu teria que relacinar todas com todas?

    Em relação as condições, no inner eu já tenho que relacionar uma tabela com outra tabela. No inner posso por condições que uso geralmente no where ou isto vai para where mesmo?
    Por exemplo eu posso por tabela B B.ID = A.ID and B.Dados = A.Dados assim ou tem que deixar apenas a relação do ID?

    Obrigado 

    [Gosto de compartilhar problemas com soluções que encontro no dia de trabalho]


    • Editado TI DEV quarta-feira, 6 de maio de 2020 17:20
    quarta-feira, 6 de maio de 2020 17:19

Todas as Respostas

  • Toriyama,

    Vamos por partes, o Inner Join é um operador condicional de junção aplicado com base nas definições da Álgebra Relacional, sendo um dos 9 operadores, o qual é utilizado basicamente para estabelecer a relação direta entre duas tabelas, ou seja, é um operador Binário (trabalha por padrão com duas tabelas). 

    O Inner Join - É a forma de junção mais utilizada para explorar os relacionamentos entre duas ou mais tabelas. Através desta junção, são retornadas todas as linhas das tabelas A e B que correspondam ao critério estabelecido na cláusula ON.

    Em relação as suas perguntas:

    Eu relacionei tabela 1 com tabela 2, tabela 2 com tabela 3 e tabela 3 com tabela 4. É isto? 

    -- Na verdade você não esta relacionando você esta aplicando uma condição, entre para o seu entendimento vamos trocar a palavra "relacionei" por "juntei".
    Ou eu teria que relacinar todas com todas? -- Não teria que fazer isso, pois caso venha a tentar fazer estaria aplicando uma outra forma de junção chamada Cross Join (Produto Cartesiano). O que não iria apresentar os dados e resultado da forma desejada, como também poderia apresentar um impacto muito grande no se relaciona a performance.

    Em relação as condições, no inner eu já tenho que relacionar uma tabela com outra tabela. No inner posso por condições que uso geralmente no where ou isto vai para where mesmo?

    -- Sim você pode utilizar outras condições em conjunto com os demais operadores aplicados na cláusula Where, em alguns casos nem todos os operadores serão analisadas da forma que você estaria aplicando no Where, pois não se esqueça que obrigatoriamente temos que usar no Inner o elemento de condição da junção ON e este será combinado com as outras condições dentro da mesma junção.

    Recomendo que você acesse a documentação oficial do Inner Join para entender e conhecer mais sobre esta forma de junção: https://docs.microsoft.com/en-us/sql/t-sql/queries/from-transact-sql?view=sql-server-2017


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | MTAC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quarta-feira, 6 de maio de 2020 18:36