Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

[Sugestão] Verificar coluna cpf com 11 digitos...

Seguindo as aulas, percebi que existem várias maneiras de conferir se os CPFs cadastrados possuem os 11 dígitos esperados.
Resolvi comparar algumas abordagens.
Qual vocês acham mais eficiente?
Sugestão da professora:

SELECT COUNT(*), LENGTH(cpf) AS qtd
FROM Colaboradores
WHERE LENGTH(cpf) = 11;

A ideia aqui é contar quantos registros possuem CPF com 11 caracteres.
Sugestão do colega @Jâmison De Mendonça Martins:

SELECT DISTINCT nome, LENGTH(cpf) AS qtd
FROM Colaboradores
WHERE LENGTH(cpf) <> 11;

Nesse caso, conseguimos identificar os registros que estão fora do padrão esperado, ou seja, aqueles cujo CPF não possui 11 caracteres.
Outras abordagens
Se a intenção for saber quantos CPFs estão inválidos, podemos simplificar:

SELECT COUNT(*) AS qtd_invalidos
FROM Colaboradores
WHERE LENGTH(cpf) != 11;

Se quisermos visualizar os registros problemáticos:

SELECT nome, cpf, LENGTH(cpf) AS qtd
FROM Colaboradores
WHERE LENGTH(cpf) != 11;

Outra opção interessante é verificar como os tamanhos estão distribuídos:

SELECT LENGTH(cpf) AS qtd_digitos, COUNT(*) AS total
FROM Colaboradores
GROUP BY LENGTH(cpf)
ORDER BY qtd_digitos;

Essa última abordagem permite enxergar quantos registros possuem 11, 10, 9 ou qualquer outra quantidade de caracteres.
Cuidados importantes

  • CPF é um identificador, não um número para cálculos.
    Por isso, normalmente faz mais sentido armazená-lo como texto (VARCHAR) do que como um tipo numérico.
    Um CPF pode começar com zero, e armazená-lo como número pode fazer esse zero ser perdido.
  • 11 caracteres não significa necessariamente CPF válido.
    O LENGTH() verifica apenas a quantidade de caracteres.
    Um valor como 12345678901 possui 11 caracteres, mas isso não significa que seja um CPF válido.
  • Também pode ser necessário verificar caracteres não numéricos.
    Se o banco permitir valores como 123.456.789-01, por exemplo, o LENGTH() retornará 14.
    Nesse caso, antes de validar a quantidade de dígitos, pode ser necessário remover pontuação ou verificar o formato.
  • Também vale observar valores nulos.
    Um CPF NULL não possui comprimento da mesma forma que um CPF preenchido.
    Dependendo da regra do sistema, pode ser interessante verificar esses registros separadamente.

O ideal é sempre tratar a base de dados antes de qualquer analise para evitar problemas futuros...
Há ferramentas bem uteis para isso utilizando o python e o proprio power BI...desconheço como fazer isso com sql.
No fim, achei interessante perceber que existem várias formas de investigar a mesma informação no SQL.
Uma consulta pode responder quantos estão corretos, outra pode mostrar quais estão incorretos, e outra pode mostrar como os dados estão distribuídos.
Agora fiquei curioso:
Qual dessas abordagens vocês consideram mais eficiente ou mais adequada para uma validação desse tipo?
Comente ai...bons estudos.

1 resposta

Oi, Ronaldo. Tudo bem?

A sua comparação de formas pra verificar a coluna CPF com 11 dígitos mostra bem como consultas diferentes podem atender objetivos distintos dentro de uma validação de dados.

Para identificar problemas, eu priorizaria WHERE LENGTH(cpf) != 11, porque ele direciona a análise aos registros que precisam de correção. Já o GROUP BY LENGTH(cpf) é uma dica interessante para uma primeira exploração da base, pois permite visualizar rapidamente a distribuição dos tamanhos antes de decidir como tratar cada situação.

Outro ponto importante é o que você comentou: validar 11 caracteres não garante que o CPF seja válido, então essa consulta funciona melhor como uma etapa de qualidade dos dados do que como uma validação completa do documento.

Em uma base real, você começaria analisando a distribuição dos tamanhos ou iria direto aos registros fora do padrão?

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!