Aprenda os tipos de dados numéricos no SQL Server, como escolher corretamente para cada cenário, entender limitações, consumo de memória, impactos em performance e melhores práticas.
Compreender todos os tipos numéricos disponíveis no SQL Server, suas diferenças, limites e quando usá-los.
| Tipo | Tamanho | Faixa de valores | Quando usar |
|---|---|---|---|
| TINYINT | 1 byte | 0 a 255 | Contadores pequenos, flags numéricas |
| SMALLINT | 2 bytes | -32.768 a 32.767 | Campos que não passarão de ~30k |
| INT | 4 bytes | -2.147.483.648 a 2.147.483.647 | Padrão para chaves primárias |
| BIGINT | 8 bytes | ±9,22e18 | Grandes volumes, como logs ou IDs únicos |
| DECIMAL(p,s) | 5–17 bytes | Precisão definida por p,s | Financeiro, quando exatidão é crítica |
| FLOAT / REAL | 4 ou 8 bytes | Aproximado | Medições científicas e cálculos onde erro de arredondamento é tolerável |
| BIT | 1 bit | 0, 1 ou NULL | Status, flags booleanas |
TINYINTO que é / Para que serve: Números inteiros de 0 a 255, sem sinal (não negativos).
Sintaxe: col TINYINT
Como funciona: Armazena inteiros positivos pequenos; ótimo para contadores e indicadores compactos.
Implicações & boas práticas: • Use para valores sempre ≥0. • Economiza espaço comparado a INT.
CREATE TABLE FaixaEtaria (Codigo TINYINT, Descricao NVARCHAR(50));
INSERT INTO FaixaEtaria VALUES (1, 'Criança'), (2, 'Adulto');
SELECT * FROM FaixaEtaria;
INTO que é / Para que serve: Números inteiros comuns, muito usado para chaves primárias.
Sintaxe: col INT
Como funciona: Armazena números inteiros de ±2 bilhões. Ideal para IDs sequenciais e contagens gerais.
Implicações & boas práticas: • Mais eficiente para índices que BIGINT. • É o padrão para PKs quando não se espera volume gigantesco.
CREATE TABLE Produtos (
ProdutoID INT PRIMARY KEY,
Nome NVARCHAR(50)
);
INSERT INTO Produtos VALUES (1,'Mouse'),(2,'Teclado');
SELECT * FROM Produtos;
BIGINTO que é / Para que serve: Use quando espera números muito grandes, além do limite do INT.
Sintaxe: col BIGINT
Como funciona: Armazena até ±9,22e18. Mais pesado, mas necessário para grandes volumes.
Implicações & boas práticas: • Ideal para sistemas com bilhões de linhas. • Evite usar se não precisar, pois ocupa mais espaço.
CREATE TABLE Logs (
LogID BIGINT PRIMARY KEY,
Mensagem NVARCHAR(200)
);
INSERT INTO Logs VALUES (9000000000001,'Primeiro log');
SELECT * FROM Logs;
DECIMAL(p,s) / NUMERIC(p,s)O que é / Para que serve: Representa números exatos com precisão controlada, muito usado em financeiro.
Sintaxe: col DECIMAL(10,2)
Como funciona: Parâmetros: p = precisão total; s = casas decimais. Ex.: (10,2) = 8 dígitos inteiros + 2 decimais.
Implicações & boas práticas: • Use para valores monetários. • FLOAT não é adequado para dinheiro pois arredonda.
CREATE TABLE Vendas (
Valor DECIMAL(10,2)
);
INSERT INTO Vendas VALUES (99.90),(1000.00);
SELECT SUM(Valor) AS Total FROM Vendas;
FLOAT / REALO que é / Para que serve: Números de ponto flutuante, aproximados.
Sintaxe: col FLOAT / col REAL
Como funciona: FLOAT (8 bytes, 53 bits precisão), REAL (4 bytes, 24 bits precisão). Permitem valores muito grandes, mas podem perder exatidão.
Implicações & boas práticas: • Não use para financeiro. • Útil em cálculos científicos e médias com tolerância a pequenas variações.
CREATE TABLE Medicoes (
Temperatura FLOAT
);
INSERT INTO Medicoes VALUES (36.6),(36.55);
SELECT AVG(Temperatura) FROM Medicoes;
BITO que é / Para que serve: Tipo lógico: armazena 0, 1 ou NULL.
Sintaxe: col BIT
Como funciona: Usado para status e flags booleanas. Usa apenas 1 bit por linha (compactado).
Implicações & boas práticas: • Ideal para colunas de controle: Ativo/Inativo, Pago/Não pago. • Pode armazenar NULL se não definido.
CREATE TABLE Usuarios (
Nome NVARCHAR(50),
Ativo BIT DEFAULT(1)
);
INSERT INTO Usuarios VALUES ('Ana',1),('Bruno',0);
SELECT * FROM Usuarios;