Lição 1.4 · Tempo de leitura: ~8 min
Os tipos de dados definem que tipo de valor cada coluna pode armazenar numa base de dados relacional. Nesta lição, vai aprender os tipos SQL mais comuns, quando usar cada um e como escolhas corretas melhoram a qualidade dos dados, o armazenamento e o desempenho das consultas.
Na lição anterior, vimos tabelas, chaves, restrições e ACID. Agora vamos para uma decisão prática de modelação: escolher o tipo de dados certo para cada coluna.

Antes de entrar nos subtipos, veja os principais grupos de tipos de dados em SQL:
TINYINT, INT, BIGINT, DECIMAL, FLOATCHAR, VARCHAR, TEXTDATE, TIME, DATETIME, TIMESTAMPBOOLEAN, BLOB, JSONOs tipos numéricos armazenam números, mas cada grupo resolve um problema diferente:
Tipos inteiros armazenam apenas números sem parte decimal.
| Tipo | Tamanho típico | Intervalo assinado aproximado |
|---|---|---|
TINYINT | 1 byte | -128 a 127 |
SMALLINT | 2 bytes | -32.768 a 32.767 |
INTEGER / INT | 4 bytes | -2.147.483.648 a 2.147.483.647 |
BIGINT | 8 bytes | -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807 |
Os limites exatos podem variar consoante o SGBD e o suporte a signed/unsigned.
DECIMAL guarda valores exatos com precisão fixa.
DECIMAL(p, s) significa:p = total de dígitos,s = dígitos após a vírgula.DECIMAL(10, 2) permite valores até 99.999.999,99.Tipos de ponto flutuante armazenam valores aproximados.
DOUBLE costuma oferecer mais precisão que FLOAT.Os tipos de texto diferem principalmente no comportamento de comprimento e armazenamento.
CHAR(10) reserva sempre 10 caracteres.VARCHAR(255) armazena apenas os caracteres necessários.Tipos temporais devem ser usados sempre que a coluna representa data, hora ou instante de evento.
Armazena apenas a data (ano, mês e dia).
Armazena apenas a hora (hora, minuto e segundo).
Armazena data e hora em conjunto.
Dependendo do SGBD, TIMESTAMP pode ter comportamento relacionado com fuso horário, enquanto DATETIME costuma ser neutro. Confirme esse detalhe antes de modelar tabelas de auditoria e eventos.
Muitas bases relacionais também oferecem tipos especializados:
BOOLEAN: valores verdadeiro/falso.BLOB: dados binários, como imagens e ficheiros.JSON: documentos JSON semiestruturados.Checklist prático:
DECIMAL para finanças e evite FLOAT para dinheiro.VARCHAR para texto variável; use CHAR apenas para formatos fixos.Escolher bem os tipos na modelação inicial reduz migrações futuras, erros de aplicação e regressões de desempenho.
Principais conclusões desta lição:
CHAR, VARCHAR e TEXT devem ser escolhidos com base no tamanho esperado e no comportamento de armazenamento.DATE, TIME e TIMESTAMP, não texto simples.DECIMAL guarda valores exatos e é indicado para dinheiro. FLOAT guarda valores aproximados e pode introduzir diferenças de arredondamento.
Na maioria dos casos, use VARCHAR, porque nomes e emails têm tamanho variável. CHAR faz mais sentido para campos de tamanho fixo.
Não. NULL representa um valor ausente ou desconhecido. É um marcador especial, não um tipo de dados.
A escolha deve considerar o intervalo de valores esperado. Use o menor tipo que cubra esse intervalo sem risco de overflow.
Porque DECIMAL preserva precisão exata e evita erros de arredondamento típicos de tipos de ponto flutuante.
Problemas comuns incluem conversões incorretas, ordenação/filtragem erradas, desperdício de armazenamento, consultas mais lentas e lógica de aplicação mais complexa.