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.
OLENGTH()verifica apenas a quantidade de caracteres.
Um valor como12345678901possui 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 como123.456.789-01, por exemplo, oLENGTH()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.
UmCPFNULLnã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.