0Pricing
SQL Interview Prep · Aula

Ordenação por várias colunas e posicionamento de NULL

Misture ASC e DESC e entenda como NULLS FIRST e NULLS LAST diferem entre bancos de dados.

Ordenação por várias colunas e posicionamento de NULL é uma aula grátis de SQL 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 SQL Interview Prep, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Interview Prep inclui 4 aulas no total.

Por que a ordenação aparece em entrevistas

Os entrevistadores recorrem cedo a ORDER BY porque isso revela se você entende que um conjunto de resultados SQL é não ordenado por padrão. Sem uma ordenação explícita, o banco de dados pode retornar as linhas em qualquer ordem.

Uma pergunta inicial comum é: "Como você garante que as linhas retornem em uma ordem específica?" A única resposta correta é uma cláusula ORDER BY explícita. Confiar na ordem de inserção, na ordem da chave primária ou na ordem do índice é um erro clássico de iniciantes.

Nesta lição, você dominará as ordenações por várias colunas e a questão complicada de onde os valores NULL ficam.

Noções básicas de ASC e DESC

ORDER BY ordena em ordem crescente (ASC) por padrão. Você só precisa de DESC para inverter a ordem. A direção se aplica por coluna, não à cláusula inteira.

Dica para entrevistas: diga que ASC é o padrão implícito, portanto você não precisa escrevê-lo. Muitos candidatos pensam, incorretamente, que um DESC inverte todas as colunas.

SELECT name, hire_date
FROM employees
ORDER BY hire_date DESC;

Ordenação por várias colunas

Liste várias colunas separadas por vírgulas. O SQL ordena pela primeira coluna, depois resolve os empates com a segunda e assim por diante. Pense nisso como uma cadeia de desempate.

O exemplo ordena por departamento em ordem alfabética e, dentro de cada departamento, por salário do maior para o menor.

  • Ordenação principal: department em ordem crescente
  • Desempate: salary em ordem decrescente
SELECT department, name, salary
FROM employees
ORDER BY department ASC, salary DESC;

Combinando ASC e DESC

Uma armadilha frequente em entrevistas: cada coluna tem sua própria direção. Escrever ORDER BY a, b DESC ordena a em ordem crescente e b em ordem decrescente, não ambas em ordem decrescente.

Se quiser ambas em ordem decrescente, você precisa escrever ORDER BY a DESC, b DESC. Seja explícito quando a pergunta combinar direções.

SELECT region, sales_year, revenue
FROM sales
ORDER BY region ASC, sales_year DESC;

Onde ficam os NULL?

Este é o ponto central da lição. NULL significa desconhecido, portanto o padrão não impõe uma posição, e os bancos de dados divergem quanto ao padrão:

  • PostgreSQL & Oracle: NULLs ficam por último em ASC e em primeiro em DESC.
  • MySQL & SQL Server: NULLs ficam em primeiro em ASC e por último em DESC (tratados como o menor valor).

Os entrevistadores adoram perguntar: "Onde os NULL aparecem nesta ordenação?" A resposta honesta é: depende do mecanismo, a menos que você controle isso explicitamente.

Controlando explicitamente a posição de NULL

Para tornar a posição determinística independentemente dos padrões do mecanismo, use NULLS FIRST ou NULLS LAST. PostgreSQL, Oracle e SQLite oferecem suporte direto a isso.

A consulta abaixo força as datas de contratação desconhecidas para o final, embora a coluna esteja em ordem crescente.

SELECT name, hire_date
FROM employees
ORDER BY hire_date ASC NULLS LAST;

Emulando NULLS LAST no MySQL

MySQL não oferece suporte à palavra-chave NULLS LAST. A alternativa portável é uma chave de ordenação inicial que indica se o valor é NULL.

A expressão hire_date IS NULL retorna 0 para datas reais e 1 para NULLs. Ordená-la em ordem crescente empurra os NULLs para o final; depois, a segunda chave ordena as datas reais.

SELECT name, hire_date
FROM employees
ORDER BY (hire_date IS NULL) ASC, hire_date ASC;

Emulando NULLS FIRST no SQL Server

O SQL Server também não oferece NULLS FIRST/LAST. Use uma expressão CASE como chave de ordenação inicial. Aqui, os NULL recebem classificação 0, portanto aparecem primeiro.

Vale a pena memorizar este padrão: uma coluna sinalizadora calculada, colocada antes da coluna de ordenação real, oferece controle total sobre a posição de NULL em qualquer dialeto.

SELECT name, hire_date
FROM employees
ORDER BY CASE WHEN hire_date IS NULL THEN 0 ELSE 1 END,
         hire_date ASC;

Exemplo resolvido: tabela de classificação

Suponha que você esteja criando uma tabela de classificação: a maior pontuação vem primeiro e, em caso de empate, o jogador que se cadastrou primeiro fica em posição superior. Jogadores que nunca pontuaram (pontuação NULL) ficam no final.

A ordenação precisa de três chaves: uma sinalização de NULL, a pontuação em ordem decrescente e a data de cadastro em ordem crescente como desempate.

SELECT player, score, signup_date
FROM players
ORDER BY (score IS NULL) ASC,
         score DESC,
         signup_date ASC;

Ressalva sobre a estabilidade da ordenação

Outra pergunta favorita: "Se duas linhas forem iguais em todas as chaves de ORDER BY, em que ordem elas retornarão?"

Resposta: indefinida. As ordenações SQL não têm estabilidade garantida, portanto linhas iguais podem aparecer em qualquer ordem relativa, e essa ordem pode mudar entre execuções ou depois de uma alteração no índice.

A solução é adicionar um desempate totalmente único, geralmente uma chave primária, para que o resultado seja reproduzível.

SELECT id, name, salary
FROM employees
ORDER BY salary DESC, id ASC;

Observação de desempenho sobre ordenação

Ordenar pode ser caro. Se ORDER BY corresponder a um índice existente com a mesma ordem e as mesmas direções das colunas, o mecanismo poderá ler as linhas já ordenadas e ignorar uma etapa de ordenação separada.

Direções incompatíveis (por exemplo, o índice é todo crescente, mas você ordena uma coluna em ordem decrescente) geralmente impedem isso, forçando uma ordenação em memória ou em disco. Mencionar essa relação entre a ordem do índice e o custo da ordenação demonstra maturidade ao entrevistador.

Verificação rápida

Teste seu domínio das regras de direção para várias colunas.

Recapitulação

Principais conclusões sobre ordenação por várias colunas e posição de NULL:

  • Os conjuntos de resultados não têm ordem, a menos que você adicione ORDER BY.
  • A direção é por coluna; ASC é o padrão.
  • A posição de NULL varia conforme o mecanismo: por último em ASC no PostgreSQL/Oracle, em primeiro em ASC no MySQL/SQL Server.
  • Use NULLS FIRST/LAST onde houver suporte ou, nos demais casos, uma sinalização inicial com IS NULL / CASE.
  • Adicione um desempate único (como a chave primária) para obter uma ordem reproduzível.

Perguntas Frequentes

A aula “Ordenação por várias colunas e posicionamento de NULL” é grátis?

Sim — o texto completo de “Ordenação por várias colunas e posicionamento de NULL” é 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 Interview Prep, atualize para CoddyKit PRO. O curso de SQL Interview Prep inclui 4 aulas no total.

O que vou aprender em “Ordenação por várias colunas e posicionamento de NULL”?

Misture ASC e DESC e entenda como NULLS FIRST e NULLS LAST diferem entre bancos de dados. Você pratica SQL 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 SQL Interview Prep?

Nenhuma experiência prévia é necessária. SQL 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 “Ordenação por várias colunas e posicionamento de NULL”?

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 Interview Prep?

Sim. Cada aula de SQL 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

  1. Ordenação por várias colunas e posicionamento de NULL
  2. LIMIT, OFFSET e FETCH FIRST
  3. Retornando as linhas Top-N de forma confiável
  4. Ordenando por expressões e aliases
← Voltar para SQL Interview Prep