SQLaliasesAStutorial

Aliases (AS) no SQL: aliases de tabelas e colunas para iniciantes

Os aliases são nomes curtos para tabelas e colunas no SQL. Tornam as consultas legíveis e se tornam obrigatórios ao fazer JOIN de tabelas com nomes de coluna compartilhados. Sintaxe, casos imprescindíveis, erros comuns e três exercícios.

6 min de leituraSQL · aliases · AS · tutorial · beginner

Um alias é um pseudônimo curto para uma tabela ou uma coluna em uma consulta. O SQL permite renomear qualquer coisa na hora na saída e dar a uma tabela um identificador curto para ser mais fácil de referenciar.

Duas variantes:

  • Alias de coluna — renomeia a coluna do resultado. SELECT salary AS pay → o cabeçalho da coluna de saída é "pay".
  • Alias de tabela — um nome curto para uma tabela dentro desta consulta. FROM employees e → em vez de employees.name você escreve e.name.

Palavra-chave: AS. Opcional.

Por que os aliases importam

  1. Legibilidade. e.name é mais curto que employees.name. Em uma consulta de cinco tabelas isso é enorme.
  2. Obrigatórios quando há ambiguidade. Se duas tabelas compartilham um nome de coluna (digamos id), o banco de dados não consegue saber a qual você se refere sem um prefixo.
  3. Saída limpa. Se o resultado é LOWER(CONCAT(first_name, ' ', last_name)), a coluna recebe um nome feio autogerado. AS full_name resolve isso.
  4. Autojunções. Quando uma tabela se junta a si mesma (por exemplo, uma hierarquia funcionário-gerente), os aliases são a única forma.

Alias de coluna

SELECT
  first_name AS given_name,
  last_name  AS surname,
  salary * 12 AS annual_salary
FROM employees;

O que acontece:

  • first_name → coluna de saída "given_name".
  • last_name → "surname".
  • O calculado salary * 12 → "annual_salary". Sem um alias seria ?column? (PostgreSQL) ou salary * 12 (MySQL) — feio.

AS é opcional: salary * 12 annual_salary funciona da mesma forma. Por legibilidade, mantenha o AS.

Exemplo real com employees:

idfirst_namelast_namesalary
1AnnaIvanova4000
2BorisPetrov2700
3VeraSidorova5000

Consulta:

SELECT
  first_name AS given_name,
  salary * 12 AS annual_salary
FROM employees;

Resultado:

given_nameannual_salary
Anna48000
Boris32400
Vera60000

Alias de tabela

SELECT e.first_name, d.name
FROM employees e
JOIN departments d ON e.department_id = d.id;

Cada tabela ganhou um nome de uma letra. Mais curto que employees.first_name e departments.name.

Boa prática: as primeiras letras do nome da tabela. users u, orders o, products p. Se duas tabelas começam com a mesma letra — users u, user_logs ul. Faça o alias ser mnemônico, não t1, t2.

AS para os aliases de tabela também é opcional e a maioria dos estilos o omite:

-- equivalente
FROM employees AS e
FROM employees e

Quando os aliases são obrigatórios

Em um JOIN onde ambas as tabelas compartilham um nome de coluna, você precisa prefixar as referências — e um alias curto é a forma prática.

Exemplo: um usuário tem id, um pedido tem id.

-- Não funciona — id é ambíguo
SELECT id FROM users JOIN orders ON users.id = orders.user_id;

-- Funciona
SELECT u.id, o.id
FROM users u
JOIN orders o ON u.id = o.user_id;

Autojunção — aliases ou nada

Quando uma tabela se junta a si mesma, o banco de dados não consegue distinguir as cópias sem aliases. Exemplo: funcionários com um manager_id que referencia outro funcionário da mesma tabela.

employees:

idnamemanager_id
1AnnaNULL
2Boris1
3Vera1
4Grisha2
5Denis2

Objetivo: parear cada funcionário com o seu gerente.

SELECT
  emp.name AS employee,
  mgr.name AS manager
FROM employees emp
LEFT JOIN employees mgr ON emp.manager_id = mgr.id;

Resultado:

employeemanager
AnnaNULL
BorisAnna
VeraAnna
GrishaBoris
DenisBoris

A tabela é uma só, mas aparece duas vezes na consulta — como emp e como mgr. Sem aliases, o banco de dados não consegue saber a qual name você se refere.

Subconsultas no FROM — alias obrigatório

Uma subconsulta no FROM precisa ter um alias:

SELECT t.country, t.cnt
FROM (
  SELECT country, COUNT(*) AS cnt
  FROM users
  GROUP BY country
) t
WHERE t.cnt > 10;

Uma subconsulta é uma "tabela temporária". Sem um nome você não consegue referenciá-la. Tanto o PostgreSQL quanto o MySQL dão erro: "every derived table must have its own alias".

Aliases e ordem de execução

Pegadinha importante: um alias de coluna não pode ser usado no WHERE.

-- NÃO FUNCIONA
SELECT salary * 12 AS annual
FROM employees
WHERE annual > 1000000;

Por quê: o SQL avalia WHERE antes de SELECT. No momento em que o WHERE é executado, annual ainda não existe. Soluções alternativas:

-- Opção 1: repita a expressão
WHERE salary * 12 > 1000000

-- Opção 2: subconsulta ou CTE
SELECT * FROM (
  SELECT salary * 12 AS annual FROM employees
) t WHERE t.annual > 1000000;

No ORDER BY os aliases funcionam sim — ORDER BY é executado depois de SELECT:

SELECT salary * 12 AS annual
FROM employees
ORDER BY annual DESC;  -- OK

Exemplo maior: uma rede social

users:

idname
1Anna
2Boris

posts:

idauthor_idtitlelikes
101My first post12
111Cute cats87
122Borscht recipe45

comments:

idpost_idauthor_idtext
20102Awesome!
21111Thanks for the likes!
22112Cool :)

Objetivo: mostrar "autor da publicação — título da publicação — autor do comentário — texto do comentário".

SELECT
  pa.name AS post_author,
  p.title AS post_title,
  ca.name AS comment_author,
  c.text  AS comment_text
FROM posts p
JOIN users pa   ON pa.id = p.author_id
JOIN comments c ON c.post_id = p.id
JOIN users ca   ON ca.id = c.author_id
ORDER BY p.id, c.id;

Resultado:

post_authorpost_titlecomment_authorcomment_text
AnnaMy first postBorisAwesome!
AnnaCute catsAnnaThanks for the likes!
AnnaCute catsBorisCool :)

Aliases obrigatórios aqui:

  • users aparece duas vezes (como autor da publicação e como autor do comentário) → são necessários aliases diferentes pa e ca.
  • A coluna name existe tanto em pa quanto em ca → ambígua sem um prefixo.
  • Os aliases de coluna (AS post_author, AS comment_author) tornam a saída legível.

Esta consulta simplesmente não dá para escrever sem aliases.

Erros comuns de iniciante

1. Usar um alias de coluna no WHERE. Não funciona (veja a ordem de execução). ORDER BY — sim, WHERE — não.

2. Esquecer o alias em uma subconsulta no FROM. Erro "every derived table must have its own alias".

3. Aliases de uma letra por toda parte. Com cinco tabelas a, b, c, d, e, uma semana depois você não lembra qual é qual. Use nomes curtos mnemônicos: users u, orders o, payments p.

4. Aliases entre aspas ou com espaços. Quer espaços ou uma palavra-chave no seu alias? O PostgreSQL precisa de aspas duplas: AS "My Column". Simplesmente não faça isso — use snake_case.

5. Definir um alias de tabela e mesmo assim escrever o nome completo. Inútil: FROM employees e ... WHERE employees.id = 1 — o alias está definido mas não é usado. Você vai obter "invalid reference to FROM-clause entry for table 'employees'".

6. O alias colide com uma palavra reservada. AS user, AS order podem causar problemas em alguns bancos de dados. Evite ou coloque entre aspas.

Resumo rápido

  • Um alias é um pseudônimo para uma tabela ou coluna, opcionalmente introduzido com AS.
  • AS é opcional em ambos os contextos.
  • Os aliases de coluna são visíveis em SELECT, ORDER BY, GROUP BY, não em WHERE nem HAVING (ordem de execução).
  • Os aliases de tabela são obrigatórios ao fazer JOIN de tabelas com nomes de coluna compartilhados.
  • As autojunções são impossíveis sem aliases.
  • Uma subconsulta no FROM precisa ter um alias.

Experimente você mesmo

Sobre as tabelas de exemplo:

  1. Liste as publicações com o autor e o número de comentários. Use aliases para abreviar.
  2. Autojunção sobre employees: pareie cada gerente com os funcionários que se reportam a ele.
  3. Subconsulta no FROM: calcule a avaliação média das publicações que têm mais de 50 curtidas. A consulta interna filtra, a externa tira a média.

Os aliases são uma técnica que melhora muito a legibilidade. Faça disso um hábito: dê nomes curtos às tabelas nos JOINs.

Pratique com exercícios reais

Resolva exercícios no treinador de SQL com correção instantânea e dicas.

Abrir o treinador