O DynamoDB pode ter valores nulos?

Sim. DynamoDB possui um tipo NULL dedicado que representa um atributo com estado desconhecido ou indefinido. Ele também permite strings vazias e valores binários vazios para atributos não-chave, além de listas e mapas vazios. não permite conjuntos vazios (string, número ou binário), que são rejeitados com um ValidationException.

O tipo NULL

NULL é um tipo de atributo real, escrito como {"NULL": true}. Use-o quando quiser registrar que um campo existe, mas não tem valor - diferente de simplesmente omitir o atributo.

Quais valores vazios são permitidos

  • Sequência vazia/binário vazio — permitido em atributos não-chave e dentro de listas e mapas.
  • Lista vazia/mapa vazio — permitido.

O que não é permitido

  • Conjuntos vazios (SS, NS, BS) — rejeitados com um ValidationException.
  • Sequência vazia ou binária em um atributo chave — os valores chave devem ter comprimento maior que zero.

Como são as rejeições

Um PutItem aceitou {"NULL": true}, {"S": ""}, {"L": []}, {"M": {}} e um {"B": ""} de byte zero no mesmo item, e GetItem retornou todos os cinco inalterados. Essas três escritas não sobreviveram. As mensagens são do próprio mecanismo, embrulhadas para caber e intactas, incluindo erros de digitação:

tags: {"SS": []}
  ValidationException: One or more parameter values were invalid:
  An string set  may not be empty

pk: {"S": ""}
  ValidationException: One or more parameter values are not valid.
  The AttributeValue for a key attribute cannot contain an empty
  string value. Key: pk

gsiKey: {"NULL": true}
  ValidationException: Invalid attribute value type

Esse terceiro é a armadilha. Você não pode anular uma chave de índice para manter um item fora de um índice esparso: toda a gravação é rejeitada, então a única maneira de deixar um item não indexado é omitir o atributo.

NULL conta como presente

Cada filtro trata um atributo NULL como se estivesse lá. A digitalização do item acima com attribute_exists(explicitNull) o retornou, assim como explicitNull = :n com :n definido como {"NULL": true} e attribute_type(explicitNull, "NULL"). Somente attribute_not_exists separa "explicitamente nulo" de "não armazenado".

Dica de modelagem

Omitir totalmente um atributo costuma ser mais limpo do que armazenar NULL e permite índices esparsos. Escolha com base no fato de "ausente" e "explicitamente nulo" significarem coisas diferentes em seu modelo.

Construindo filtros em torno de NULL

As expressões de filtro tratam NULL como presente. Para encontrar itens com um nulo explícito, use attribute_type(attr, 'NULL') ou compare :n com {"NULL": true}. Para excluí-los, use attribute_not_exists ou teste para um tipo de concreto como attribute_type(attr, 'S'), dependendo do seu modelo.

O Expression Builder gera os mapas name/value para os filtros attribute_exists e attribute_not_exists para que você possa verificar a integridade de um Scan antes de pagar por ele.

No DynoTable: o editor de itens grava atributos NULL em todos os três modos JSON. Abra uma linha, defina um campo como nulo e prepare a alteração para revisão antes de confirmá-la. Consulte Editar itens.

Aprofunde-se

Leia tipos de dados DynamoDB e índices esparsos. Baixe DynoTable para editar atributos, incluindo NULL, diretamente.

Referências

Última verificação em 13/07/2026 em relação à documentação oficial do AWS vinculada acima.

Reproduzido em 28/07/2026 em DynamoDB Local 3.3.0 via @aws-sdk/client-dynamodb 3.1095.0 - as strings de erro e os resultados do filtro acima são saídas textuais do mecanismo. O serviço ao vivo pode expressar um ValidationException de maneira diferente do mecanismo local.

Trabalhe com o DynamoDB sem o Console

Um cliente desktop rápido para DynamoDB que roda o SQL de verdade que o DynamoDB não consegue — JOINs, GROUP BY, agregações — com edição visual e um agente de IA com suas próprias chaves do Bedrock.

Teste grátis de 30 dias, sem cartão de crédito — depois o plano Grátis sem limite de tempo.