0Pricing
SQL Academy · Aula

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.id

Sua 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 JOIN para excluir linhas sem correspondência (por exemplo, gerentes no topo da hierarquia) ou LEFT JOIN para mantê-las
  • Adicione WHERE, GROUP BY e funções de agregação exatamente como faria em qualquer outra junção
  • Use a.id < b.id na cláusula ON para 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

  1. O que é uma autojunção
  2. Funcionários e gerentes
  3. Comparando linhas na mesma tabela
  4. Limitações das autojunções
← Voltar para SQL Academy