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
- Legibilidade.
e.name é mais curto que employees.name. Em uma consulta de cinco tabelas isso é enorme.
- 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.
- Saída limpa. Se o resultado é
LOWER(CONCAT(first_name, ' ', last_name)), a coluna recebe um nome feio autogerado. AS full_name resolve isso.
- 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:
| id | first_name | last_name | salary |
|---|
| 1 | Anna | Ivanova | 4000 |
| 2 | Boris | Petrov | 2700 |
| 3 | Vera | Sidorova | 5000 |
Consulta:
SELECT
first_name AS given_name,
salary * 12 AS annual_salary
FROM employees;
Resultado:
| given_name | annual_salary |
|---|
| Anna | 48000 |
| Boris | 32400 |
| Vera | 60000 |
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:
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.
SELECT id FROM users JOIN orders ON users.id = orders.user_id;
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:
| id | name | manager_id |
|---|
| 1 | Anna | NULL |
| 2 | Boris | 1 |
| 3 | Vera | 1 |
| 4 | Grisha | 2 |
| 5 | Denis | 2 |
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:
| employee | manager |
|---|
| Anna | NULL |
| Boris | Anna |
| Vera | Anna |
| Grisha | Boris |
| Denis | Boris |
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.
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:
WHERE salary * 12 > 1000000
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;
Exemplo maior: uma rede social
users:
posts:
| id | author_id | title | likes |
|---|
| 10 | 1 | My first post | 12 |
| 11 | 1 | Cute cats | 87 |
| 12 | 2 | Borscht recipe | 45 |
comments:
| id | post_id | author_id | text |
|---|
| 20 | 10 | 2 | Awesome! |
| 21 | 11 | 1 | Thanks for the likes! |
| 22 | 11 | 2 | Cool :) |
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_author | post_title | comment_author | comment_text |
|---|
| Anna | My first post | Boris | Awesome! |
| Anna | Cute cats | Anna | Thanks for the likes! |
| Anna | Cute cats | Boris | Cool :) |
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:
- Liste as publicações com o autor e o número de comentários. Use aliases para abreviar.
- Autojunção sobre
employees: pareie cada gerente com os funcionários que se reportam a ele.
- 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.
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:
SELECT salary AS pay→ o cabeçalho da coluna de saída é "pay".FROM employees e→ em vez deemployees.namevocê escrevee.name.Palavra-chave:
AS. Opcional.Por que os aliases importam
e.nameé mais curto queemployees.name. Em uma consulta de cinco tabelas isso é enorme.id), o banco de dados não consegue saber a qual você se refere sem um prefixo.LOWER(CONCAT(first_name, ' ', last_name)), a coluna recebe um nome feio autogerado.AS full_nameresolve isso.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".salary * 12→ "annual_salary". Sem um alias seria?column?(PostgreSQL) ousalary * 12(MySQL) — feio.ASé opcional:salary * 12 annual_salaryfunciona da mesma forma. Por legibilidade, mantenha oAS.Exemplo real com
employees:Consulta:
SELECT first_name AS given_name, salary * 12 AS annual_salary FROM employees;Resultado:
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_nameedepartments.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ãot1,t2.ASpara os aliases de tabela também é opcional e a maioria dos estilos o omite:-- equivalente FROM employees AS e FROM employees eQuando 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 temid.-- 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_idque referencia outro funcionário da mesma tabela.employees: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:
A tabela é uma só, mas aparece duas vezes na consulta — como
empe comomgr. Sem aliases, o banco de dados não consegue saber a qualnamevocê se refere.Subconsultas no FROM — alias obrigatório
Uma subconsulta no
FROMprecisa 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
WHEREantes deSELECT. No momento em que oWHEREé executado,annualainda 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 BYos aliases funcionam sim —ORDER BYé executado depois deSELECT:SELECT salary * 12 AS annual FROM employees ORDER BY annual DESC; -- OKExemplo maior: uma rede social
users:posts:comments: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:
Aliases obrigatórios aqui:
usersaparece duas vezes (como autor da publicação e como autor do comentário) → são necessários aliases diferentespaeca.nameexiste tanto empaquanto emca→ ambígua sem um prefixo.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 orderpodem causar problemas em alguns bancos de dados. Evite ou coloque entre aspas.Resumo rápido
AS.ASé opcional em ambos os contextos.SELECT,ORDER BY,GROUP BY, não em WHERE nem HAVING (ordem de execução).Experimente você mesmo
Sobre as tabelas de exemplo:
employees: pareie cada gerente com os funcionários que se reportam a ele.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.