Organizando números em ordem crescente na prática
Ordenar valores de forma crescente é uma das tarefas mais comuns em planilhas, bancos de dados e scripts, mas o processo é onde as coisas costumam dar errado. Muita gente assume que basta clicar em "crescente" e pronto, mas os resultados nem sempre são o que parecem. Vou mostrar como fazer isso corretamente em diferentes contextos e onde você provavelmente vai tropeçar.
O que é número em ordem crescente
A definição básica é simples: disposição dos valores do menor para o maior. Um, dois, cinco, dez. Mas a parte importante é entender como diferentes ferramentas interpretam isso. No Excel, por exemplo, ao selecionar uma coluna e aplicar ordenação, ele trata os dados com base no tipo da célula. Se um número está formatado como texto, ele vai ser ordenado lexicograficamente e não numericamente. Isso significa que 10 vai aparecer antes de 2, porque o caractere "1" vem antes do "2". Já vi planilhas inteiras serem montadas assim e ninguém perceber até a auditoria. Em Python, o comportamento é diferente. A função sorted() com reverse=False ou o método .sort() em listas ordena corretamente desde que os elementos sejam números inteiros ou floats. O problema aparece quando a lista contém strings numéricas, como ["1", "10", "2"]. A ordenação padrão vai colocar "10" entre "1" e "2". A solução é passar o parâmetro key=int, mas isso só funciona se todos os itens forem conversíveis para inteiro.
No SQL, um ORDER BY campo ASC faz a ordenação baseada no tipo de dado da coluna. INT funciona como esperado. VARCHAR é onde a coisa fica feia. Se você tem uma coluna VARCHAR com valores como "1", "100", "2", "20", a ordenação será alfabética. A correção é converter explicitamente com CAST ou CONVERT, dependendo do banco.
Métodos práticos por ferramenta
Vou detalhar o que funciona de verdade em cada ambiente, começando pelo mais acessível.
Excel e Google Sheets
No Excel, selecione as colunas que quer ordenar e vá em Dados > Ordenar. Se seus números estão misturados com texto ou células, o Excel vai exibir um aviso perguntando se você quer expandir a seleção. Sempre clique em expandir. Se você ignorar isso, ele ordena apenas a coluna selecionada e os dados ficam dessincronizados. Isso acontece com frequência em planilhas financeiras que pessoas preenchem manualmente. Uma alternativa mais robusta é usar a função =SORT() disponível no Excel 365. Ela cria uma nova matriz ordenada sem alterar os dados originais. A sintaxe é =SORT(intervalo, índice_da_coluna, 1), onde o 1 indica ordem crescente. No Google Sheets, a função equivalente é =SORT() também, com comportamento semelhante.
Se você precisa ordenar com base em múltiplas colunas, o método de interface gráfica é mais confiável do que fórmulas. Vá em Dados > Ordenar > Adicionar nível de classificação. Defina a coluna principal e depois as secundárias. O Excel aplica a ordenação de forma estável, ou seja, elementos iguais na coluna principal mantêm a ordem relativa definida nas colunas subsequentes.
Planilhas em Python
Com pandas, a função sort_values() é o padrão. Ela aceita múltiplas colunas e lida bem com valores nulos. Por padrão, valores nulos vão para o final da ordenação crescente. Isso pode ser alterado passando na_position='first'. Um caso que merece atenção: quando você lê um CSV com pd.read_csv() e alguma coluna numérica contém strings vazias ou caracteres especiais, o pandas vai inferir o tipo como objeto (string) e não como numérico. A ordenação resultante será alfabética. A correção é converter explicitamente com pd.to_numeric(coluna, errors='coerce'), que transforma valores não numéricos em NaN antes de ordenar.
Para ordenação estável em pandas, use kind='mergesort'. O mergesort é estável, enquanto o quicksort (padrão) não garante que elementos iguais mantenham sua ordem original. Em conjuntos pequenos isso não importa, mas em datasets de vendas com milhares de linhas e datas idênticas, a diferença é perceptível.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Banco de dados SQL
No PostgreSQL, MySQL e SQL Server, a cláusula ORDER BY com ASC é o caminho padrão. A questão séria é lidar com tipos de dados problemáticos. Em tabelas legadas, é comum encontrar colunas numéricas armazenadas como VARCHAR para evitar perda de dados durante migrações. Se sua tabela tem essa característica, uma ordenação direta vai falhar silenciosamente. No PostgreSQL, a solução mais limpa é usar expressões na cláusula ORDER BY. Algo como ORDER BY CAST(campo AS INTEGER) resolve o problema sem alterar a estrutura da tabela. No MySQL, funciona de forma similar com CAST(campo AS SIGNED). Em SQL Server, o CONVERT(INT, campo) faz o mesmo trabalho.
Outro ponto importante: ordenação em grandes volumes. Uma query com ORDER BY em uma tabela de milhões de registros sem índice apropriado vai gerar um sort em disco. O custo é significativo. Criar um índice na coluna ordenada transforma a operação de O(n log n) para O(log n). Se você precisa ordenar por múltiplas colunas frequentemente, considere um índice composto na ordem das colunas mais usadas.
Um problema específico que encontrei
Em 2023, Working em uma planilha de controle de estoque com cerca de 80 mil linhas, notei que a ordenação estava completamente errada. Os números apareciam como 1, 10, 100, 101, 102... 11, 12, 2, 20. A causa raiz era que a importação de um CSV externo havia convertido automaticamente algumas colunas numéricas para texto. O Excel não emitiu nenhum aviso nessa conversão porque os valores pareciam normais visualmente. A correção foi mais trabalhosa do que parece. Selecionei a coluna problemática, abri o alerta de número armazenado como texto (o losango amarelo que aparece no canto superior esquerdo de cada célula), e escolhi "Converter para número". Isso corrigiu aproximadamente 75% dos casos. As demais células tinham espaços em branco invisíveis ou caracteres de formatação que o losango não detectou. Para essas, usei a fórmula =VALOR() em uma coluna auxiliar, verifiquei onde retornava erro, e manualmente corrigi as linhas problemáticas. No total, gastei cerca de 40 minutos identificando e corrigindo as anomalias. Depois disso, a ordenação funcionou perfeitamente.
A lição prática é: sempre verifique o tipo de dado antes de confiar na ordenação. No Excel, olhe para o alinhamento. Números alinhados à direita, texto à esquerda. No Python, use df.dtypes para inspecionar rapidamente. Em SQL, consulte a syscat.columns ou INFORMATION_SCHEMA para confirmar os tipos.
Pegadinhas e limitações importantes
A ordenação crescente tem limitações que nem sempre são óbvias. Valores nulos se comportam de maneira diferente em cada ferramenta. No Excel, eles vão para o topo da ordenação crescente. No pandas, vão para o final por padrão. No SQL, o comportamento depende do banco: PostgreSQL e MySQL colocam nulos primeiro em ASC, enquanto o SQL Server coloca por último. Se você está migrando dados entre sistemas, essa diferença pode causar inconsistências nas posições dos registros. Outro ponto é a precisão com números decimais. Em Python, a ordenação de floats pode ter problemas de precisão em casos extremos. Números como 0.1 + 0.2 não são exatamente iguais a 0.3 devido à representação binária. Isso raramente afeta a ordenação em si, mas pode causar comportamento inesperado em comparações subsequentes. Para dados financeiros, use Decimal em vez de float.
Em SQL, a ordenação em colunas com valores muito grandes (milhões de linhas) sem índices adequados pode consumir muita memória e tempo. Se sua query de ordenação está levando mais de alguns segundos em tabelas grandes, examine o plano de execução. Índice ou não, a ausência de filtro antes da ordenação é a principal causa de lentidão.
Alternativas quando a ordenação tradicional falha
Quando você tem dados heterogêneos ou estruturas complexas, a ordenação padrão simplesmente não funciona. Um exemplo comum é um sistema de faturamento onde números de pedido têm partes alfanuméricas, como "ORD-001", "ORD-10", "ORD-2". A ordenação natural vai colocar "ORD-10" antes de "ORD-2". A solução aqui é extrair numericamente a parte relevant usando funções de string ou expressões regulares e ordenar pelo resultado. No PostgreSQL, existe o extension pg_trgm que ajuda com ordenação semântica, mas para casos simples, uma expressão como ORDER BY substring(campo from '\d+')::int resolve diretamente. No Excel, a função =TROCAR() combinada com extração de dígitos via fórmulas de texto consegue o mesmo efeito, embora seja mais verbosa.
Se nenhuma das abordagens acima se aplica ao seu caso específico, considere usar uma linguagem de programação para pré-processar os dados antes de inseri-los no sistema final. Python com pandas é eficiente para isso e evita a dor de cabeça de tentativas de contorno dentro do próprio Excel ou SQL.