Caso real

A coluna apareceu no join e a soma ficou errada

Juntar duas planilhas por uma chave repetida multiplica linhas em silêncio. O total continua somando, só não é mais o seu total.

· 3 min de leitura

Quatro linhas de uma planilha de um lado, multiplicadas por quinze do outro, somando 4.080 linhas no resultado do join.

Juntamos duas bases reais de uma transportadora: 272 abastecimentos e 15 carregamentos, ligados pela coluna Posto. A coluna Volume (l) carregado não apareceu no resultado, consertamos isso, e a soma veio quinze vezes maior que a real.

O bug não era o join. Era a chave.

O que acontece quando a chave repete

Um join casa cada linha da esquerda com todas as linhas da direita que têm a mesma chave. Se a chave é única dos dois lados, 272 linhas entram e 272 saem. Mas Posto não é único: os 15 carregamentos se distribuem por poucos postos, e cada abastecimento encontra vários carregamentos daquele mesmo posto.

Resultado: as 272 linhas casaram 272/272, sem nenhuma órfã e sem erro visível. E com um fan-out de 15. Cada valor de Volume (l) carregado foi copiado quinze vezes para o resultado.

Nenhum passo dá erro. A contagem de linhas é o único lugar onde o problema aparece.

Nenhuma ferramenta reclama disso. O Excel não reclama, o VLOOKUP não reclama, o SQL não reclama. A planilha fica maior, o total fica maior, e nada na tela diz que a aritmética mudou de significado.

Por que isso é pior que um erro

Um erro para o trabalho. Isso não para: entrega um número plausível.

Se o volume real carregado era 40.000 litros, a soma depois do join dá 600.000. Ninguém olha 600.000 e pensa "isso é 15× o valor certo". Olha e pensa "nossa, carregamos bastante". O número passa pela reunião, entra no slide, vira meta.

O relatório não erra a conta. Ele soma certo um conjunto de linhas que não existe.

É o pior tipo de defeito de dado: o que sobrevive à revisão porque não parece defeito.

O diagnóstico que denuncia

Duas checagens, nessa ordem.

1. A contagem de linhas mudou? Se a base da esquerda tinha 272 linhas e o resultado tem mais que 272, houve fan-out. Essa é a checagem de cinco segundos, e é a que quase ninguém faz, porque "juntar duas tabelas" soa como uma operação que preserva linhas, e não é.

2. A chave é única na base da direita? Conte os valores distintos da coluna de chave e compare com o número de linhas. Iguais: join seguro, linha a linha. Diferentes: toda soma, média e contagem da base da direita está multiplicada.

O que fazer em vez disso

Depende do que você quer, e essa é a pergunta que o join esconde:

  • Quer o volume por posto? Então agregue a base da direita antes de juntar: some os carregamentos por Posto, e só então junte. Uma linha por posto, fan-out 1, soma correta.
  • Quer os abastecimentos enriquecidos com um atributo do posto? Junte só colunas descritivas (nome, região, tipo de contrato). Repetir um rótulo quinze vezes é inofensivo. Repetir um valor não é.
  • Quer comparar os dois volumes? São duas perguntas diferentes, e a resposta é dois números lado a lado, não uma coluna derivada de outra.

A regra curta: nunca some uma coluna que veio do lado "muitos" de um join. Se precisa somar, agregue antes.

A parte que custa mais caro

Tornar a coluna visível não torna a soma correta.

Essa é a frase que ficou do caso. Gastamos o tempo no problema errado, "a coluna não veio", porque era o sintoma visível. O problema real estava uma camada abaixo, na cardinalidade da chave, e ele continuava inteiro depois do conserto.

Quando um número de relatório parece alto demais, a pergunta não é "de onde veio esse valor". É "quantas vezes esse valor está aqui".

Receba os próximos

Deixe seu e-mail e avisamos quando sair post novo. Nada além disso.

Só para avisar de post novo. Nada de spam, e você sai quando quiser.

← Todos os posts

Veja no seu próprio dado

Suba uma planilha ou conecte seu sistema e receba um dashboard em segundos.

Usamos analytics para entender como o Chartlo é usado e melhorar o produto. Você pode recusar a qualquer momento. Saiba mais.