(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa

Como tratar valores NULL no SQL Server: ISNULL e COALESCE

João Barros 14 de July de 2026 4 min de leitura

Numa base de dados real, é normal encontrar colunas sem valor: telefones em falta, comissões por preencher ou datas ainda desconhecidas. Esses espaços vazios são valores NULL e, se não forem tratados, provocam totais errados e relatórios com células em branco. No SQL Server, as funções ISNULL e COALESCE servem precisamente para isto: devolvem um valor alternativo sempre que encontram um NULL.

Pré-requisitos

  • Acesso ao SQL Server (2012 ou superior) ou ao Azure SQL Database.
  • SQL Server Management Studio ou Azure Data Studio para executar as consultas.
  • Uma base de dados de teste e conhecimentos básicos de SELECT em T-SQL.

Passo 1: Perceber o que é um valor NULL

NULL não é zero nem texto vazio: representa a ausência de informação, algo desconhecido. Por causa disso, não pode ser comparado com o operador igual. Para testar se uma coluna está vazia usa-se sempre IS NULL ou IS NOT NULL.

-- Errado: NULL nao e igual a nada, nunca devolve linhas
SELECT nome FROM Clientes WHERE telefone = NULL;

-- Correto
SELECT nome FROM Clientes WHERE telefone IS NULL;

Passo 2: Substituir NULL com ISNULL

A função ISNULL recebe dois argumentos: a expressão a verificar e o valor a devolver caso ela seja NULL. É a forma mais direta de mostrar um texto amigável em vez de um espaço vazio.

SELECT
    nome,
    ISNULL(telefone, 'Sem contacto') AS telefone
FROM Clientes;

Se a coluna telefone tiver valor, ele é mantido; se for NULL, aparece o texto "Sem contacto". A mesma ideia serve para números, o que é essencial em cálculos:

SELECT
    produto,
    preco * ISNULL(quantidade, 0) AS total
FROM Vendas;

Sem o ISNULL, qualquer linha com quantidade a NULL daria um total NULL e contaminava toda a operação.

Passo 3: Usar COALESCE para várias alternativas

COALESCE vai mais longe: aceita vários argumentos e devolve o primeiro que não for NULL. É ideal quando existe uma cascata de colunas e queres a primeira que estiver preenchida.

SELECT
    nome,
    COALESCE(telemovel, telefone_fixo, email, 'Sem contacto') AS contacto
FROM Clientes;

O SQL Server avalia da esquerda para a direita: se telemovel existir, usa-o; caso contrário passa ao telefone_fixo, depois ao email e, no fim, ao texto por omissão. Uma única função resolve o que exigiria vários CASE encadeados.

Passo 4: Saber quando usar cada uma

As duas funções parecem iguais, mas têm diferenças importantes, descritas na documentação oficial da Microsoft:

  • Número de argumentos: ISNULL aceita apenas dois; COALESCE aceita vários.
  • Portabilidade: COALESCE faz parte do standard ANSI SQL e existe noutras bases de dados; ISNULL é exclusivo do SQL Server.
  • Tipo de dados: ISNULL assume o tipo do primeiro argumento e pode truncar o valor de substituição; COALESCE segue as regras de precedência de tipos.

Essa diferença de tipo é uma armadilha frequente. Repara no exemplo:

DECLARE @codigo varchar(2) = NULL;

SELECT ISNULL(@codigo, 'ABCDE')   AS com_isnull,   -- devolve 'AB'
       COALESCE(@codigo, 'ABCDE') AS com_coalesce; -- devolve 'ABCDE'

Como @codigo é varchar(2), o ISNULL corta o texto para dois caracteres, enquanto o COALESCE preserva o valor completo. Por isso, uma boa regra é usar COALESCE por defeito e reservar o ISNULL para casos simples de duas opções.

Dica: em colunas numéricas usadas em somas ou médias, trata o NULL com 0 (ou com o valor correto para o teu cálculo) antes de agregar.

Verificar o resultado

Para confirmar que o tratamento funcionou, conta quantas linhas continuam sem contacto depois de aplicar o COALESCE. Se estiver tudo correto, o resultado deve ser 0:

SELECT COUNT(*) AS ainda_sem_contacto
FROM (
    SELECT COALESCE(telemovel, telefone_fixo, email) AS contacto
    FROM Clientes
) AS t
WHERE contacto IS NULL;

Um valor de 0 significa que todas as linhas passaram a ter um contacto. Se aparecer um número maior, essas linhas têm as três colunas vazias ao mesmo tempo e precisam de um valor final por omissão.

Conclusão

Com ISNULL e COALESCE passas a controlar exatamente o que aparece quando faltam dados, evitando somas erradas e relatórios com espaços em branco. O passo seguinte é aplicar estas funções dentro de vistas ou de medidas, para que os dados cheguem já limpos a ferramentas como o Power BI. Qual é a coluna do teu modelo que mais precisa de um valor por omissão?