O que são junções em SQL?
São comandos que combinam dados de duas ou mais tabelas com base em uma condição relacionada entre elas (normalmente chaves).
Qual comando básico é usado para fazer junção entre tabelas?
JOIN (INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN, etc.)
O que faz um INNER JOIN?
Retorna apenas os registros que possuem correspondência nas duas tabelas.
Exemplo de INNER JOIN entre clientes e vendas pela coluna cliente_id.
SELECT c.nome, v.data_venda
FROM clientes c
INNER JOIN vendas v
ON c.cliente_id = v.cliente_id;
O que faz um LEFT JOIN?
Retorna todos os registros da tabela da esquerda e os correspondentes da direita. Se não houver correspondência, retorna NULL.
Exemplo de LEFT JOIN para listar todos os clientes, mesmo sem vendas.
SELECT c.nome, v.data_venda
FROM clientes c
LEFT JOIN vendas v
ON c.cliente_id = v.cliente_id;
O que faz um RIGHT JOIN?
Retorna todos os registros da tabela da direita, com os correspondentes da esquerda. Se não houver, retorna NULL.
Exemplo de RIGHT JOIN entre vendas e clientes.
SELECT c.nome, v.data_venda
FROM vendas v
RIGHT JOIN clientes c
ON c.cliente_id = v.cliente_id;
O que faz um FULL JOIN?
Retorna todos os registros das duas tabelas, com NULL onde não houver correspondência.
Exemplo de FULL JOIN.
SELECT c.nome, v.data_venda
FROM clientes c
FULL JOIN vendas v
ON c.cliente_id = v.cliente_id;
CROSS JOIN
Retorna o produto cartesiano entre as duas tabelas — ou seja, todas as combinações possíveis.
Exemplo de CROSS JOIN.
SELECT a.nome, b.produto
FROM atendentes a
CROSS JOIN produtos b;
Qual a função da cláusula ON em joins?
Especifica a condição de junção entre as tabelas (ex: ON a.id = b.id).
É possível usar WHERE com joins?
Sim, para filtrar os dados após a junção. Exemplo:
… INNER JOIN … ON …
WHERE c.estado = ‘SP’;
A ordem das tabelas afeta o resultado em um INNER JOIN?
Não, desde que a condição ON esteja correta, o INNER JOIN é comutativo, ou seja, a ordem das tabelas não altera o resultado final.
A ordem das tabelas afeta o resultado em um LEFT JOIN?
Sim. A tabela à esquerda do LEFT JOIN é a tabela base, e a da direita é a que pode retornar NULL se não houver correspondência.
No LEFT JOIN, qual tabela deve vir primeiro?
A tabela principal, cujos dados devem sempre aparecer (mesmo sem correspondência), deve vir antes do LEFT JOIN.
Exemplo em que a ordem do LEFT JOIN altera o resultado:
– Lista todos os clientes, mesmo sem vendas
SELECT c.nome, v.valor
FROM clientes c
LEFT JOIN vendas v ON c.id = v.cliente_id;
– Invertendo a ordem: lista apenas vendas com ou sem cliente (pouco usual)
SELECT c.nome, v.valor
FROM vendas v
LEFT JOIN clientes c ON c.id = v.cliente_id;
Em qual tipo de join a ordem das tabelas não importa?
No INNER JOIN e CROSS JOIN a ordem não afeta o resultado final (desde que os campos na cláusula ON estejam corretos).
A ordem afeta RIGHT JOIN?
Sim. A tabela à direita é a que sempre aparece. Se quiser inverter, troque por LEFT JOIN e altere a posição das tabelas.
Como inverter um RIGHT JOIN?
Transforme-o em um LEFT JOIN, trocando a ordem das tabelas. Exemplo:
– RIGHT JOIN
SELECT * FROM vendas v RIGHT JOIN clientes c ON v.cliente_id = c.id;
– Equivalente com LEFT JOIN
SELECT * FROM clientes c LEFT JOIN vendas v ON v.cliente_id = c.id;
Por que usar alias em junções?
Para evitar repetição de nomes longos e deixar o código mais limpo:
SELECT c.nome, v.data
FROM clientes c
JOIN vendas v ON c.id = v.cliente_id;
Por que usar alias em junções (joins)?
Para deixar o código mais limpo, evitar repetição de nomes de tabelas longos e facilitar a leitura da consulta.
Como referenciar uma coluna com alias da tabela?
Usamos alias.coluna, exemplo: c.nome, v.data_venda.