O que é uma autojunção
Faça a junção de uma tabela consigo mesma usando aliases.
O que é uma autojunção é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de SQL Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Academy inclui 4 aulas no total.
Associando uma tabela a si mesma
Uma junção da tabela consigo mesma ocorre quando uma tabela é associada a si mesma. Isso pode parecer incomum no início, mas é uma técnica poderosa usada quando as linhas de uma única tabela estão relacionadas a outras linhas da mesma tabela.
O exemplo mais comum é uma tabela de funcionários na qual cada linha de funcionário também armazena o ID do seu gerente — que também é um funcionário na mesma tabela.
A tabela de funcionários
Considere uma tabela employees na qual cada linha tem um id, um name e um manager_id que aponta para outra linha da mesma tabela.
Essa estrutura é chamada de relação autorreferente ou recursiva. Execute a consulta abaixo para criar e preencher a tabela.
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(50),
manager_id INT
);
INSERT INTO employees VALUES
(1, 'Alice', NULL),
(2, 'Bob', 1),
(3, 'Carol', 1),
(4, 'Dave', 2),
(5, 'Eve', 2),
(6, 'Frank', 3);Por que as junções normais não funcionam aqui
Se quiser exibir cada funcionário junto do nome do seu gerente, as duas informações estarão na mesma tabela. Uma junção normal conecta duas tabelas diferentes (ou pelo menos duas origens diferentes).
Para ler a mesma tabela duas vezes — uma vez para o funcionário e outra para o gerente — é necessário usar uma junção da tabela consigo mesma combinada com nomes alternativos de tabela.
Introdução aos nomes alternativos
Para executar uma junção da tabela consigo mesma, escreva o mesmo nome de tabela duas vezes na cláusula FROM / JOIN e atribua um nome alternativo diferente a cada ocorrência. Esses nomes alternativos permitem que o SQL trate as ocorrências como duas tabelas lógicas separadas.
A convenção é usar nomes alternativos curtos e descritivos, como e para funcionário e m para gerente.
-- Conceptual structure (not yet a full query)
-- FROM employees AS e
-- JOIN employees AS m ON e.manager_id = m.idSua primeira junção da tabela consigo mesma
Aqui está uma junção completa da tabela consigo mesma que lista cada funcionário junto do nome do seu gerente. A condição ON conecta o manager_id do funcionário ao id do gerente.
Alice não tem gerente, portanto é excluída pela INNER JOIN — não há uma linha correspondente no lado do gerente.
SELECT
e.name AS employee,
m.name AS manager
FROM employees AS e
INNER JOIN employees AS m
ON e.manager_id = m.id;Incluindo linhas sem gerente
Quando você usa INNER JOIN, as linhas que não têm correspondência são descartadas. Alice tem manager_id = NULL, por isso desaparece dos resultados.
Altere para LEFT JOIN para manter todos os funcionários e simplesmente exibir NULL (ou um rótulo) quando não houver gerente.
SELECT
e.name AS employee,
COALESCE(m.name, 'No Manager') AS manager
FROM employees AS e
LEFT JOIN employees AS m
ON e.manager_id = m.id;Filtrando os resultados da junção
Você pode adicionar uma cláusula WHERE a uma junção da tabela consigo mesma, assim como faria em qualquer outra consulta. O exemplo abaixo recupera apenas os funcionários cujo gerente direto é Alice (ID = 1).
SELECT
e.name AS employee,
m.name AS manager
FROM employees AS e
INNER JOIN employees AS m
ON e.manager_id = m.id
WHERE m.name = 'Alice';Contando subordinados diretos
As junções da tabela consigo mesma combinam naturalmente com funções de agregação. A consulta abaixo conta quantos subordinados diretos cada gerente tem, agrupando pelo nome alternativo do gerente.
SELECT
m.name AS manager,
COUNT(e.id) AS direct_reports
FROM employees AS e
INNER JOIN employees AS m
ON e.manager_id = m.id
GROUP BY m.name
ORDER BY direct_reports DESC;Junções da tabela consigo mesma em dados não hierárquicos
As junções da tabela consigo mesma não se limitam a hierarquias. Sempre que as linhas de uma tabela se relacionarem a outras linhas da mesma tabela, uma junção da tabela consigo mesma poderá ajudar.
Por exemplo, é possível encontrar todos os pares de funcionários que têm o mesmo gerente — associando a tabela a si mesma com base em valores correspondentes de manager_id e garantindo que um funcionário não seja associado a si mesmo.
SELECT
a.name AS employee_1,
b.name AS employee_2,
a.manager_id
FROM employees AS a
INNER JOIN employees AS b
ON a.manager_id = b.manager_id
AND a.id < b.id;O papel do nome alternativo
Os nomes alternativos são obrigatórios em uma junção da tabela consigo mesma — sem eles, o banco de dados não consegue identificar a qual cópia da tabela cada coluna se refere, e você receberá um erro de ambiguidade.
Você pode usar os nomes alternativos que quiser. A regra principal é que toda referência a uma coluna deve ser prefixada com o nome alternativo correto, para que o SQL saiba qual instância da tabela deve consultar.
-- This will fail: column 'name' is ambiguous
-- SELECT name FROM employees JOIN employees ON manager_id = id;
-- This works: aliases remove the ambiguity
SELECT e.name, m.name
FROM employees AS e
JOIN employees AS m ON e.manager_id = m.id;Casos de uso no mundo real
As junções da tabela consigo mesma aparecem com frequência em bancos de dados reais. Entre os casos de uso comuns estão:
- Organogramas — funcionários e seus gerentes
- Árvores de categorias — categorias pai e filhas
- Listas de materiais — componentes compostos por outros componentes
- Redes sociais — encontrar amigos de amigos em uma única tabela de conexões
Reconhecer uma chave estrangeira autorreferente em um esquema é a primeira indicação de que uma junção da tabela consigo mesma pode ser necessária.
Verificação rápida
Teste sua compreensão das junções da tabela consigo mesma antes de continuar.
Recapitulação da lição
Nesta lição, você aprendeu o que é uma junção da tabela consigo mesma e quando usá-la:
- Uma junção da tabela consigo mesma conecta uma tabela a si mesma, fazendo referência a ela duas vezes com diferentes nomes alternativos
- Use
INNER JOINpara excluir linhas sem correspondência (por exemplo, gerentes no topo da hierarquia) ouLEFT JOINpara mantê-las - Adicione
WHERE,GROUP BYe funções de agregação exatamente como faria em qualquer outra junção - Use
a.id < b.idna cláusulaONpara evitar pares duplicados ao comparar linhas dentro da mesma tabela - As junções da tabela consigo mesma são a ferramenta principal para dados hierárquicos, árvores de categorias e qualquer relação autorreferente
A seguir: explore hierarquias de vários níveis com CTE recursivas.
Perguntas Frequentes
A aula “O que é uma autojunção” é grátis?
Sim — o texto completo de “O que é uma autojunção” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de SQL Academy, atualize para CoddyKit PRO. O curso de SQL Academy inclui 4 aulas no total.
O que vou aprender em “O que é uma autojunção”?
Faça a junção de uma tabela consigo mesma usando aliases. Você pratica SQL Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar SQL Academy?
Nenhuma experiência prévia é necessária. SQL Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “O que é uma autojunção”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de SQL Academy?
Sim. Cada aula de SQL Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- O que é uma autojunção
- Funcionários e gerentes
- Comparando linhas na mesma tabela
- Limitações das autojunções