0Pricing
SQL Academy · Aula

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 ROUND apó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

  1. Aritmética e operadores
  2. Arredondamento e truncamento
  3. Divisão de inteiros versus decimais
  4. Funções matemáticas úteis
← Voltar para SQL Academy