Como lidar com nomes de cidades que começam com a letra D em sistemas oficiais
A gente sempre subestima como nomes de cidades com d podem complicar cadastros, planilhas e bases de dados. Não é só um detalhe estético. É questão de lógica de validação, normalização e, às vezes, de não perder horas caçando duplicados que não deveriam existir. Vou começar pela parte que ninguém gosta: a normalização. O primeiro passo é padronizar tudo para maiúsculas ou minúsculas antes de qualquer filter. Parece óbvio, mas a maior parte dos erros que vejo em produção vem de quem tenta concatenar campos sem normalizar. Um "Diadema" e um "diadema" na mesma base são dois registros diferentes para uma query ingênua. Normaliza primeiro, depois trata.
O que considerar ao criar um nome de cidade com d
Existem regras práticas que todo mundo esquece. A primeira é acentuação. Cidades como "São Domingos" ou "Diamantina" têm acentos que quebram regex sós. Se o seu sistema exige ASCII, use transliteração controlada: "o" vira "o", "ã" vira "a". Documenta esse mapeamento. Sem documentação, um colega chega e substitui acentos por ou remove eles aleatoriamente, e a base vira soup de inconsistência. A segunda regra é o prefixo "D". Em português, há cidades que começam com "Da", "Do", "Dos", "Das", "D'". Isso aparece o tempo todo no Nordeste e no Centro-Oeste. "Da Mata", "Do Amaral", "Dourados". Se sua lógica de filtragem só checa a primeira letra, você perde 40% dos resultados que deveria mostrar. Trate o artigo como parte do nome, não como algo separável, a menos que o catálogo oficial diga o contrário.
No Brasil, os exemplos mais comuns de cidades com d incluem Dourados (MS), Dionísio Cerqueira (SC), Diamantino (MT), Dom Basílio (BA), Durandé (MG), Dionísio (não existe como município, mas aparece em bairros), além de cidades como Dagorn (não é município) e lugares menores que só aparecem em listas completas do IBGE. A lista inteira do IBGE tem cerca de 5.570 municípios, e os que começam com D representam uma fatia pequena, mas significativa para quem trabalha com geocódigo.
Exemplo prático de implementação
Se você está montando um select de cidades, não use LIKE 'D%'. Use uma função que normalize primeiro. Em SQL, algo como: SELECT cidade FROM municipios WHERE LOWER(REPLACE(REPLACE(cidade, 'ã', 'a'), 'á', 'a')) LIKE 'd%' OR LOWER(cidade) LIKE 'da %' OR LOWER(cidade) LIKE 'do %' OR LOWER(cidade) LIKE 'das %' OR LOWER(cidade) LIKE 'dos %' OR LOWER(cidade) LIKE 'd''%
👉 Clique no botão abaixo para saber mais sobre o assunto!
É feio, mas funciona. Depois disso, aplique um DISTINCT para evitar duplicados que surgem de variação de grafia. No meu caso, uma vez precisei migrar uma base de 120 mil endereços de um sistema legado para outro. A nova tabela exigia validação de cidade pelo IBGE. Encontrei três registros de "Dourados" que estavam escritos como "Douarados", "Douradose" e "DouradoS". O sistema de correspondência automática rejeitou todos. A solução foi criar uma tabela de mapping manual com as variações mais frequentes, baseada em frequência de ocorrência nos dados reais. Levei duas horas para montar o mapping, mas economizei cerca de 15 horas de trabalho manual de conferência que seria necessário sem ele.
Armadilhas que todo mundo pisa
A primeira armadilha é confiar cegamente no código IBGE. O IBGE atualiza municípios e altera nomes ocasionalmente. Há cidades que foram extintas, outras que ganharam novos nomes, e algumas que simplesmente foram omitidas em versões mais antigas da tabela. Sempre valide contra a versão mais recente disponível no site do IBGE, idealmente usando o dump anual de dezembro. A segunda é ignorar abreviações estaduais. "Dourados-MS" não é o mesmo formato que "Dourados / MS" ou "Dourados, MS". Se sua integração espera um padrão, normalize antes de enviar. Eu vi gente enviar "Dourados-Ms" em vez de "MS" e o sistema de destino rejeitar porque a sigla estava errada. Minúsculas em siglas estaduais são um erro recorrente que parece bobo até você levar um bounce de API.
Quando não usar esse approach
Se o volume for pequeno — menos de 1.000 registros — e a qualidade dos dados já for boa, não gasta tempo com normalização complexa. Um script simples de upper() e trim() resolve. A normalização avançada que descrevi acima é para bases grandes, sujas, ou quando a integração é com sistemas externos que não aceitam variabilidade. Também não funciona bem quando o contexto é puramente humano, como uma lista de cidades para um quiz ou jogo. Nesses casos, a rigidez da normalização atrapalha mais do que ajuda. O ideal é adaptar a estratégia ao objetivo real.
Recursos úteis
O download da tabela completa de municípios com códigos IBGE está disponível gratuitamente no site do IBGE. O arquivo XML ou CSV contém nome completo, sigla do estado, código de região e coordenadas. É a fonte mais confiável que existe no Brasil para esse tipo de trabalho. Não reinvente a rodagem usando listas de terceiros que podem estar desatualizadas. Para quem trabalha com Python, a biblioteca pandas junto com o arquivo do IBGE permite construir um dicionário de cidades rapidamente. Um merge bem feito entre a sua base e o dump do IBGE resolve 90% dos problemas de validação em menos de 10 minutos, dependendo do tamanho do arquivo.
Se você precisa de uma lista pronta de cidades com d, pode filtrar o dump do IBGE por `nome.upper().startswith('D')`. Dá para refinar depois com as regras de artigo que mencionei. O resultado é uma lista limpa, validada e pronta para uso em produção.