Inner Join vs Outer Join
Inner join e Outer join são dois dos métodos de junção SQL usados no processamento de consultas para bancos de dados. Eles pertencem à família de cláusulas de junção (outras duas são Junções Esquerda e Direita). No entanto, existe um Self Join que pode ser usado para situações especializadas. A finalidade de Join é combinar campos usando os valores comuns às duas tabelas. Essas junções combinam registros de várias tabelas em um banco de dados. Ele cria conjuntos resultantes, que podem ser salvos como outra tabela.
O que é Inner Join?
A operação SQL Join mais comumente usada é a Inner Join. Pode ser considerado como o tipo padrão de junção usado em aplicativos. A junção interna usa o predicado de junção para combinar duas tabelas. Supondo que as duas tabelas sejam A e B, o predicado de junção comparará as linhas de A e B para descobrir todos os pares que satisfazem o predicado. Os valores das colunas de todas as linhas satisfeitas das tabelas A e B são combinados para criar o resultado. Ele pode ser visto como primeiro obtendo a junção cruzada (produto cartesiano) de todos os registros e, em seguida, retornando apenas os registros que satisfazem o predicado de junção. No entanto, na realidade, o produto cartesiano não é calculado porque é muito ineficiente. A junção de hash ou junção de mesclagem de classificação é usada.
O que é Outer Join?
Ao contrário da junção interna, a junção externa mantém todos os registros, mesmo que não encontre um registro correspondente. Isso significa que a junção externa precisa de um registro para encontrar um registro correspondente para que apareça no resultado. Em vez disso, ele retornará todos os registros, mas os registros não correspondentes terão valores nulos. As junções externas são divididas em três subcategorias. Eles são junção externa esquerda, junção externa direita e junção externa completa. Essa diferenciação é baseada em qual linha da tabela (tabela esquerda, tabela direita ou ambas as tabelas) é retida quando registros não correspondentes são encontrados. As junções externas esquerdas (também conhecidas como simplesmente junções esquerdas) mantêm todos os registros da tabela esquerda. Isso significa que, mesmo que o número de registros correspondentes seja zero, ele ainda terá registros na tabela de resultados, mas terá valores nulos para todas as colunas de B. Em outras palavras, todos os valores da tabela da esquerda são retornados com os valores correspondentes da direita table (ou valores nulos quando não correspondidos). Se os valores de várias linhas da tabela esquerda corresponderem a uma única linha da tabela direita, a linha da tabela direita será repetida conforme necessário. A junção externa direita é bastante semelhante à junção externa esquerda, mas o tratamento das tabelas é reverenciado. Isso significa que o resultado terá todas as linhas da tabela direita pelo menos uma vez com valores correspondentes da tabela esquerda (e valores nulos para valores direitos não correspondentes). A junção externa completa é mais abrangente do que as junções externas esquerda e direita. Isso resulta na combinação do efeito de aplicar o externo esquerdo e direito juntos.
Qual é a diferença entre Inner Join e Outer Join?
Inner Join não mantém as linhas não correspondidas no resultado, mas a junção externa manterá todos os registros de pelo menos uma tabela (dependendo de qual junção externa foi usada). Portanto, o comportamento de não ter informações presentes em linhas não correspondidas na tabela de resultados é indesejável, você precisa sempre usar uma das associações externas (no lugar da associação interna). A junção interna pode não produzir um resultado se nenhuma correspondência for encontrada. Mas a junção externa sempre produzirá uma tabela resultante, mesmo sem linhas correspondentes. A junção interna sempre retornará tabelas com valores (se retornados). Mas junções externas podem resultar em tabelas com valores nulos.