Qual é a diferença entre junções internas e externas?

Ambas as junções internas e externas são usadas para combinar dados de duas ou mais tabelas; no entanto, existem algumas diferenças importantes! Leia este artigo para descobrir os pontos fortes de cada comando e quando usá-los.

Para obter o máximo desta e de nossas outras lições, certifique-se de praticar usando os exemplos!

Todos os os exemplos desta lição são baseados no Microsoft SQL Server Management Studio e no banco de dados AdventureWorks2012. Comece a usar essas ferramentas gratuitas usando meu Guia de primeiros passos com o SQL Server.

Qual é a diferença entre junções internas e junções externas?

As junções internas e externas são combinações de linhas de dois ou mais tabelas em um único resultado usando uma condição de junção. A condição de junção especifica como as colunas de cada tabela correspondem umas às outras. Na maioria dos casos, o objetivo é encontrar valores iguais entre as tabelas e incluir essas correspondências.

O caso mais comum para isso é quando você está combinando a chave estrangeira de uma tabela com a chave primária de outra , como ao usar e ID para pesquisar um valor.

Embora as junções internas e externas incluam linhas de ambas as tabelas quando a condição de correspondência for bem-sucedida, elas diferem na maneira como tratam uma condição de correspondência falsa.

As junções internas não incluem linhas não correspondentes; enquanto as junções externas as incluem.

Vamos nos aprofundar um pouco mais na mecânica de cada

Mecânica da junção interna

Uma junção interna é usada para retornar resultados combinando linhas de duas ou mais tabelas.

Em seu caso mais simples, onde não há condição de junção, uma junção interna combinaria todas as linhas de uma tabela com as de outra. Se a primeira tabela contiver três linhas e a segunda quatro, o resultado final conterá doze (3 x 4 = 12)!

O propósito da condição de junção é limitar quais linhas são combinadas. Na maioria dos casos, limitamos as linhas àquelas que correspondem a uma coluna.

Se uma pessoa tiver mais de um número de telefone, mais de uma correspondência será feita. A partir disso, você pode ver que podemos obter mais linhas retornadas do que para cada pessoa.

Tabelas para ingressar

Inversamente, se uma pessoa não tiver número de telefone, não haverá uma entrada no PersonPhone e nenhuma correspondência será feita. Essa pessoa em particular não será incluída nos resultados, pois apenas aqueles com correspondências são incluídos.

Vamos tentar um exemplo.

Exemplo de junção interna

Suponha o gerente de RH deseja criar uma lista telefônica. Eles querem o nome, sobrenome, cargo e números de telefone da pessoa. Que consulta você poderia usar para criar isso?

Aqui está uma que resolveria o problema:

SELECT P.FirstName, P.LastName, P.Title, PH.PhoneNumberFROM Person.Person AS P INNER JOIN Person.PersonPhone AS PH ON P.BusinessEntityID = PH.BusinessEntityID AND PH.PhoneNumberTypeID = 3ORDER BY P.LastName

O INNER JOIN especifica quais tabelas para entrar e a condição de correspondência para fazê-lo. A condição PH.Phone NumberTyeID = 3 limita a consulta aos números comerciais.

Se você executar o procedimento acima, obterá os seguintes resultados:

Resultados de junção interna

Tenha em mente que a junção interna retorna apenas a linha onde a condição de correspondência é verdade. Neste exemplo, as linhas em que os BusinessEntityIDs não correspondem não são incluídas. Isso pode ser um problema se uma pessoa não tiver um número de telefone, pois esses funcionários não estariam na lista.

Se desejar incluir esses funcionários, você pode usar uma associação externa.

Mecânica de junção externa

Uma junção externa é usada para retornar resultados combinando linhas de duas ou mais tabelas. Mas, ao contrário de uma junção interna, a junção externa retornará todas as linhas de uma tabela especificada, mesmo se a condição de junção falhar.

Veja o exemplo da lista telefônica acima. Se o gerente de RH quisesse listar todos os funcionários, independentemente de eles terem um número de telefone comercial, o uso de uma junção externa tornaria isso possível.

SELECT P.FirstName, P.LastName, P.Title, PH.PhoneNumberFROM Person.Person AS P LEFT OUTER JOIN Person.PersonPhone AS PH ON P.BusinessEntityID = PH.BusinessEntityID AND PH.PhoneNumberTypeID = 3ORDER BY P.LastName

Você pode aprenda mais sobre junções externas esquerda e direita neste artigo, por agora apenas entenda que quando um LEFT OUTER JOIN é usado, todas as linhas da tabela na cláusula FROM são incluídas no resultado, mesmo se uma correspondência não for encontrada com o outra tabela.

Quando uma correspondência não é encontrada, um NULL é colocado na coluna.

Você pode ver isso em ação abaixo:

Resultados de junção externa

Observe no exemplo que PhoneNumber para Catherine Abel é NULL. Isso ocorre porque o número de trabalho de Catherine não está listado e nenhuma correspondência foi encontrada durante a junção.

Se esta fosse uma junção interna, esta linha não teria sido incluída nos resultados.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *