Projetando colunas e armadilhas de alias
Entenda por que não é possível referenciar um alias de SELECT em WHERE e como entrevistadores testam o escopo de aliases.
Projetando colunas e armadilhas de alias é uma aula grátis de Coding Interview Prep 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 Coding Interview Prep, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Coding Interview Prep inclui 4 aulas no total.
Projeção: escolhendo suas colunas
Escolher quais colunas uma consulta retorna é chamado de projeção — é isso que você faz sempre que escreve SELECT. Nomeie-as explicitamente no código real; deixe SELECT * para explorações rápidas.
SELECT id, first_name, email
FROM employees;Por que os entrevistadores não gostam de SELECT *
Por que os entrevistadores não gostam de SELECT * no código da aplicação? Ele é frágil (a ordem das colunas pode mudar), desperdiça largura de banda, prejudica o uso de índices e esconde o que você realmente precisa. Nomeie suas colunas. 👍
Dando um apelido a uma coluna com AS
Um apelido renomeia uma coluna na saída. Use AS para deixar tudo claro — ele é especialmente útil em colunas calculadas, dando a expressões confusas como salário * 12 um cabeçalho limpo e legível.
SELECT first_name AS name,
salary * 12 AS annual_salary
FROM employees;Colocando entre aspas apelidos com espaços
Se um apelido tiver espaços ou for uma palavra reservada, você deverá colocá-lo entre aspas. A forma portátil e padrão é usar aspas duplas. Dica: prefira nomes com palavras separadas por sublinhados e não use aspas.
SELECT salary AS "Annual Pay"
FROM employees;A grande armadilha: escopo do apelido em WHERE
Aqui está a armadilha mais frequente em testes: defina um apelido em SELECT, depois filtre por ele em WHERE, e isso falhará. WHERE é executado antes de SELECT, portanto esse apelido ainda não existe.
-- This raises an error
SELECT salary * 12 AS annual_salary
FROM employees
WHERE annual_salary > 100000;O motivo: ordem lógica de execução
A solução é conhecer a ordem lógica das cláusulas: FROM, WHERE, GROUP BY, HAVING, SELECT e, depois, ORDER BY. SELECT aparece quase no final, portanto as cláusulas anteriores não conseguem acessar seus apelidos.
Correção 1: repita a expressão
A correção mais portável é simples: basta repetir a expressão em WHERE em vez de usar o apelido. É um pouco mais prolixo, mas funciona em todos os bancos de dados, sempre.
SELECT salary * 12 AS annual_salary
FROM employees
WHERE salary * 12 > 100000;Correção 2: envolva em uma subconsulta ou CTE
Se repetir uma expressão longa parecer inadequado, calcule-a primeiro em uma subconsulta ou CTE. Nesse ponto, o apelido se torna uma coluna real, e o WHERE externo pode filtrá-la.
SELECT *
FROM (
SELECT first_name, salary * 12 AS annual_salary
FROM employees
) t
WHERE annual_salary > 100000;Onde os apelidos ARE permitidos: ORDER BY
Boas notícias: ORDER BY pode usar um apelido de SELECT, porque é executado depois de SELECT. Portanto, WHERE, GROUP BY e HAVING não conseguem acessar apelidos — mas ORDER BY consegue.
SELECT first_name, salary * 12 AS annual_salary
FROM employees
ORDER BY annual_salary DESC;Diferenças entre dialetos dignas de menção
Vale mencionar: o MySQL permite de forma flexível apelidos em GROUP BY e HAVING, enquanto o Postgres e o SQL Server seguem o padrão. Raciocine com base na ordem lógica e, depois, observe a exceção.
Apelidos de tabelas versus apelidos de colunas
Não os confunda. Um apelido de tabela encurta o nome de uma tabela e fica visível em todos os lugares, inclusive em WHERE. Um apelido de coluna renomeia a saída e não fica visível — exatamente o oposto.
SELECT e.first_name, e.salary AS pay
FROM employees AS e
WHERE e.salary > 50000;Verificação rápida
Teste a armadilha principal.
Recapitulação
Recapitulando: prefira colunas explícitas a SELECT * e use apelidos com AS. Um apelido de SELECT fica invisível em WHERE/GROUP BY/HAVING, mas funciona em ORDER BY. Corrija isso repetindo a expressão ou usando uma CTE.
Perguntas Frequentes
A aula “Projetando colunas e armadilhas de alias” é grátis?
Sim — o texto completo de “Projetando colunas e armadilhas de alias” é 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 Coding Interview Prep, atualize para CoddyKit PRO. O curso de Coding Interview Prep inclui 4 aulas no total.
O que vou aprender em “Projetando colunas e armadilhas de alias”?
Entenda por que não é possível referenciar um alias de SELECT em WHERE e como entrevistadores testam o escopo de aliases. Você pratica Coding Interview Prep 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 Coding Interview Prep?
Nenhuma experiência prévia é necessária. Coding Interview Prep 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 “Projetando colunas e armadilhas de alias”?
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 Coding Interview Prep?
Sim. Cada aula de Coding Interview Prep 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
- Projetando colunas e armadilhas de alias
- Colunas calculadas e precedência de expressões
- DISTINCT versus GROUP BY para exclusividade
- Expressões CASE em SELECT