Divisão de inteiros versus decimais
Evite resultados inesperados com conversão de tipos.
Divisão de inteiros versus decimais é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 3 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 Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Academy inclui 4 aulas no total.
Um resultado surpreendente
Vamos começar com um desafio. O que você acha que a consulta a seguir retorna?
Se você espera 0.5, talvez se surpreenda. Em muitos bancos de dados SQL, dividir dois inteiros produz um resultado inteiro — descartando completamente a parte decimal.
SELECT 1 / 2 AS result;Divisão inteira explicada
Quando ambos os operandos de uma divisão são inteiros, o SQL realiza uma divisão inteira. O resultado é truncado em direção a zero — sem arredondamento, apenas a parte inteira.
Assim, 1 / 2 = 0, 7 / 3 = 2 e 9 / 4 = 2. A parte fracionária é descartada silenciosamente.
SELECT 7 / 3 AS truncated_result;Mais exemplos de divisão inteira
Aqui estão vários exemplos de divisão inteira em uma única consulta. Observe como todos os resultados perdem suas partes decimais. Esse comportamento é consistente em expressões que envolvem apenas literais inteiros ou colunas inteiras.
SELECT
10 / 4 AS ten_div_four,
9 / 2 AS nine_div_two,
1 / 3 AS one_div_three,
6 / 6 AS six_div_six;Corrigindo com CAST
A maneira mais confiável de forçar uma divisão decimal é converter pelo menos um operando para um tipo decimal. CAST(value AS DECIMAL) ou CAST(value AS NUMERIC) informa ao SQL que trate o número como um valor de ponto flutuante, para que a divisão retorne um resultado preciso.
SELECT CAST(1 AS DECIMAL) / 2 AS result;Aplicando CAST aos dois lados
Você só precisa converter um lado da divisão para obter um resultado decimal — o SQL converterá o outro operando automaticamente. No entanto, converter os dois lados torna a intenção explícita e evita confusão ao ler o código mais tarde.
SELECT
CAST(7 AS DECIMAL) / CAST(3 AS DECIMAL) AS both_cast,
CAST(7 AS DECIMAL) / 3 AS one_cast;Usando um literal decimal
Outra dica rápida é escrever um operando como um literal decimal adicionando .0. O SQL interpreta 1.0 como um número decimal, o que força a aritmética decimal em toda a expressão.
Isso é útil para consultas rápidas e pontuais, embora CAST seja mais claro no código de produção.
SELECT 1.0 / 2 AS decimal_result,
7.0 / 3 AS another_result;Armadilha do mundo real: dados de colunas
O problema realmente aparece ao trabalhar com colunas inteiras. Imagine uma tabela que acompanha metas de vendas. Dividir colunas inteiras produz resultados inteiros — uma taxa de conversão de 0 quando deveria ser 0.75!
CREATE TABLE sales_targets (
rep TEXT,
achieved INT,
target INT
);
INSERT INTO sales_targets VALUES
('Alice', 75, 100),
('Bob', 3, 4),
('Carol', 9, 10);
SELECT rep,
achieved / target AS wrong_rate
FROM sales_targets;Corrigindo a divisão da coluna
Aplique CAST à coluna do numerador, e a divisão agora retorna a verdadeira taxa de conversão como um decimal. O denominador é promovido automaticamente.
Multiplicar por 100.0 depois fornece uma porcentagem — ainda usando aritmética decimal do início ao fim.
SELECT rep,
CAST(achieved AS DECIMAL) / target AS conversion_rate,
CAST(achieved AS DECIMAL) / target * 100.0 AS pct
FROM sales_targets;Controlando a precisão decimal
Você pode controlar quantas casas decimais são armazenadas especificando precisão e escala na conversão: DECIMAL(10, 2) significa até 10 dígitos no total, 2 após o ponto decimal. Isso é útil quando você quer uma saída organizada e arredondada, em vez de muitos dígitos finais.
SELECT CAST(CAST(1 AS DECIMAL(10,4)) / 3 AS DECIMAL(10,2)) AS rounded_result;ROUND após a divisão
Às vezes, você quer fazer os cálculos internamente com precisão total e só depois arredondar o valor final exibido. A função ROUND recebe o valor e o número de casas decimais que você deseja manter.
Sempre divida primeiro, usando aritmética decimal, e depois arredonde — nunca arredonde antes de dividir.
SELECT
ROUND(CAST(1 AS DECIMAL) / 3, 4) AS four_places,
ROUND(CAST(1 AS DECIMAL) / 3, 2) AS two_places,
ROUND(CAST(1 AS DECIMAL) / 3, 0) AS zero_places;A divisão inteira pode ser útil
A divisão inteira nem sempre é um erro — às vezes é exatamente o que você precisa. Por exemplo, converter um número total de minutos em horas inteiras usa a divisão inteira de propósito. O importante é escolher deliberadamente entre a divisão inteira e a decimal, em vez de deixar que isso aconteça por acidente.
SELECT
137 / 60 AS full_hours,
137 % 60 AS remaining_minutes;Verificação rápida
Teste sua compreensão da divisão inteira versus decimal em SQL.
Resumo da lição
Nesta lição, você aprendeu como SQL lida com a divisão entre inteiros:
- Inteiro / Inteiro trunca o resultado — a parte decimal é silenciosamente perdida.
- Use
CAST(value AS DECIMAL)em pelo menos um dos operandos para forçar a divisão decimal. - Escrever um literal decimal, como
1.0, também promove a expressão para a aritmética decimal. - Use
ROUNDapós a divisão para controlar o número de casas decimais exibidas. - A divisão inteira às vezes é intencional, por exemplo, ao converter minutos em horas, mas sempre faça dela uma escolha consciente, e não um acidente.
Fique atento a essa armadilha sempre que dividir colunas inteiras — ela é uma das fontes mais comuns de erros silenciosos e difíceis de detectar em consultas SQL.
Perguntas Frequentes
A aula “Divisão de inteiros versus decimais” é grátis?
Sim — o texto completo de “Divisão de inteiros versus decimais” é 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 Academy, atualize para CoddyKit PRO. O curso de SQL Academy inclui 4 aulas no total.
O que vou aprender em “Divisão de inteiros versus decimais”?
Evite resultados inesperados com conversão de tipos. Você pratica SQL Academy 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 Academy?
Nenhuma experiência prévia é necessária. SQL Academy 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 3 de 4.
Quanto tempo leva a aula “Divisão de inteiros versus decimais”?
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 Academy?
Sim. Cada aula de SQL Academy 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
- Aritmética e operadores
- Arredondamento e truncamento
- Divisão de inteiros versus decimais
- Funções matemáticas úteis