SQL - Joins
Tags: sql, beginners, programming, database
Published: 2023-11-14 01:19:02

## 1. Introdução
<p>&nbsp;&nbsp; Em bancos de dados, a cláusula JOIN em SQL é um recurso fundamental que permite a combinação de informações provenientes de diferentes tabelas. Essa operação é essencial para unir colunas com base em valores comuns, proporcionando a criação de conjuntos de dados mais abrangentes e significativos. </p>
<p>&nbsp;&nbsp; O SQL padrão ANSI define cinco tipos principais de JOIN - INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN e CROSS JOIN - cada um desempenhando um papel específico na obtenção de dados conforme as necessidades da consulta. Em um cenário onde os dados são distribuídos em várias tabelas lógicas, o uso eficiente de JOINS é crucial para garantir a integridade e a abrangência das análises realizadas em bancos de dados relacionais. Essa capacidade de unir dados de maneira coesa e eficiente é fundamental para explorar toda a potencialidade dos sistemas de gerenciamento de banco de dados.</p>

&nbsp;

## 2. Desenvolvimento
### 1. **Inner Join**

#### 1.1 Definição
<p>&nbsp; &nbsp;O <code>INNER JOIN</code> (ou só apenas join) é uma cláusula utilizada para unir registros que possuem correspondentes em ambas tabelas. Caso formos representar utilizando conceitos de conjutos, o resultado desta junção é a intersecção entre a Tabela A e B. Gera como resultado uma linha da Tabela A para cada registro correspondente da tabela B. </p>

![Inner Join](https://lh3.googleusercontent.com/3g1l8BRbnugGQJpkCkZCnkMy9E1-AG2m2cfJ2gHKHWFjXJUUM7XydhDfLsmiBdrYYYT02IL9gd3wTXh93ckdynOxxZA1bZWaL1KXymSHpjmJ9QzVPxNj45-bOc5tsUrRBmng-zOH)

#### 1.2 Exemplo
```sql
SELECT * FROM tabela_a
INNER JOIN tabela_b 
    ON tabela_a.id = tabela_b.tabela_a_id;
```
<br>
<hr>

### 2. **Left Join**

#### 2.1 Definição
<p>&nbsp; &nbsp;O <code>LEFT JOIN</code> é uma cláusula utilizada para unir registros de tabelas, trazendo todos os registros da tabela A e os seus correspondentes da tabela B. Em um registro da tabela A que não haja correspondente da tabela B, os campos da tabela B unidos a este registro aparecem vazios.</p>

![Left Join](https://lh6.googleusercontent.com/XJ9oLbH8TNqV9-G6UojxqbxWgTRLFMl3dOnAkx7yQLzxiLzzo9Is2qbgnzR5uRv_ipkYNWUdMQrAeiD6Pfe2JQWo2PmaVoBrOpvq37s3ShuvQK2wJP18zAdq1OZPYBS3ruEo13d3)

#### 2.2 Exemplo
```sql
SELECT * FROM tabela_a
LEFT JOIN tabela_b 
    ON tabela_a.id = tabela_b.tabela_a_id;
```
<br>
<hr>

### 3. **Right Join**

#### 3.1 Definição
<p>&nbsp; &nbsp;O <code>RIGHT JOIN</code> é uma cláusula utilizada para unir registros de tabelas, trazendo todos os registros da tabela B e os seus correspondentes da tabela A. Em um registro da tabela B que não haja correspondente da tabela A, os campos da tabela A deste registro aparecem vazios. Ele é praticamente o inverso do <code>LEFT JOIN</code></p>

![Right Join](https://lh3.googleusercontent.com/-6wZtDliITiZ174AYf9Bcb5df2Y6oupwlWxddEZVsNxNMu32I_m68SYo7ncob8Igf4AjSe6ZRfwmJQOiYcYRoo-MauhjcedNVofCNv7W6NOVQp-Y4RVQRzc8tQn7AIAW05NjWglj)

#### 3.2 Exemplo
```sql
SELECT * FROM tabela_a
RIGHT JOIN tabela_b 
    ON tabela_a.id = tabela_b.tabela_a_id;
```
<br>
<hr>

### 4. **Full Join**

#### 4.1 Definição
<p>&nbsp; &nbsp;O <code>FULL JOIN</code> é uma cláusula utilizada para unir registros de tabelas, tanto os correspondentes quanto os que não possuem correspondência alguma de ambas as tabelas. O resultado dessa junção é o resultado do <code>LEFT JOIN</code> + <code>RIGHT JOIN</code>.</p>

![Full Join](https://lh6.googleusercontent.com/FPaG66RF7633vSMy9AKxB2HqU-7qNTLlvLZgiOYwSbVip3D3cdHCGry1-BlCzpWO39h5HSNA_mJBsSGkbBV0HqghYy2pUmDrQTrgfxaijribC88Ml5PXBPPRQvpmbZRF6XJWlIt3)

#### 4.2 Exemplo
```sql
SELECT * FROM tabela_a
FULL JOIN tabela_b 
    ON tabela_a.id = tabela_b.tabela_a_id;
```
<br>
<hr>

### 5. **Cross Join**

#### 5.1 Definição
<p>&nbsp; &nbsp;O <code>CROSS JOIN</code> é uma cláusula utilizada para gerar o produto escalar entre as tabelas, ou seja, juntando cada registro da tabela A com cada registro da tabela B. Esta operção tem como resultado todas as probabilidades de junção de registros entre as duas tabelas. Por fim, a quantidade de linhas resultante é dada pela quantidade de linhas da tabela A vezes a quantidade de linhas da tabela B.</p>

![Cross Join](https://lh3.googleusercontent.com/F8Lo1m8vuP4JfJONh5yWj34_U1doOfhZs8kPV8w83IIrUS7T6YB6yCCTjESAoHDkexSK-7orBuiG9XjAI4lfUcoF_jfTu-A18vP7wFJp3g9LBlSVUUdQzy0HYB6RunpTwFlYjvAn)

#### 5.2 Exemplo
```sql
SELECT * FROM tabela_a
CROSS JOIN tabela_b;
```
<hr>

### Vantagens e Desvantagens de se utilizar os JOINs
#### Vantagens
- Funciona muito bem com tabelas normalizadas
- Simplificar consultas complexas entre várias tabelas relacionadas
- Melhora no Desempenho caso utilizado de forma correta no cenário adequado

#### Desvantagens
- É mais fácil consultar as informações necessárias em apenas em uma tabela em vez de obter dados de terceiras
- Não é recomendado para tabelas desnormalizadas
- Quanto mais tabelas envolvidas, maior é o impacto em performance da consulta

&nbsp;

## Exemplos de aplicações no mercado:

![Inner Join](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fzwv10rybviv72n9tdxv.jpeg)


![Left Join](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t4hoqxre2ay078wt5r58.jpeg)


![Right Join](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/amq0d84oiwrky68lzlay.jpeg)


![Full Join](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iaobo0dkh2qz3kutyqih.jpeg)


![Cross Join](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fkzuwdj09zifqgyviffx.jpeg)

&nbsp;

## 3. Conclusão

<p> &nbsp;&nbsp; O JOIN no SQL é uma cláusula importantíssima para manipular dados, fazer a relação entre tabelas e permitir filtragem para entendimento e controle. Assim, é uma forma de gerenciar a complexidade de bancos de dados grandes e gerar insights precisos sobre eles. </p>
<p> &nbsp;&nbsp; Os diversos tipos de JOINS fornecem uma maneira poderosa de combinar dados de várias tabelas. O INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN e CROSS JOIN são úteis em diferentes situações, permitindo manipulação e análise eficaz de dados complexos. Dominar esses tipos de JOINS amplia suas habilidades em SQL, tornando suas consultas mais eficientes e precisas.</p>

&nbsp;

## Referências
- Imagens dos joins: https://blog.betrybe.com/sql/sql-join/
- Imagens das aplicações no mercado: https://www.linkedin.com/pulse/entendendo-e-utilizando-os-tipos-de-joins-em-sql-um-guia-sousa/?originalSubdomain=pt