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 typeEsse 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
- Tipos de dados e regras de nomenclatura compatíveis no Amazon DynamoDB — Guia do desenvolvedor do Amazon DynamoDB
- Restrições no Amazon DynamoDB — Guia do desenvolvedor do Amazon DynamoDB
- PutItem — Referência Amazon DynamoDB API
Ú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.