Pular para o conteúdo

Filtro de pagamentos no SQL que elimina notas de uma junção externa

Compare três consultas e preserve notas com pagamentos apenas fora do período, sem confundir cobertura e total.

Escrever LEFT JOIN não garante que todas as notas permaneçam no resultado. Um filtro posterior sobre a tabela de pagamentos pode eliminar justamente os registros que a junção externa deveria preservar. Este laboratório executa três consultas sobre as mesmas quatro notas.

Base fictícia completa para o recorte

As notas N1, N2, N3 e N4 têm valores de R$ 1.000, R$ 500, R$ 700 e R$ 800. A base de pagamentos foi definida como completa. N1 tem R$ 300 no período e R$ 200 antes dele; N2 tem somente R$ 100 antes do período; N3 não tem pagamento; N4 tem R$ 400 no período.

O objetivo é relacionar todas as notas aos pagamentos de janeiro, sem calcular dívida exigível. As chaves são únicas e preenchidas. Não há itens de nota que multipliquem o relacionamento.

Consulta Notas preservadas Valor das notas Pagamentos de janeiro
Filtro de data no WHERE N1 e N4 1.800 700
WHERE aceitando também pagamento nulo N1, N3 e N4 2.500 700
Filtro no ON e agregação por nota Todas 3.000 700

Por que aceitar NULL não basta

N2 encontrou um pagamento na junção original, mas esse pagamento ficou fora do período. A condição posterior o exclui. A consulta não cria então uma nova linha vazia para N2. Acrescentar a alternativa de pagamento nulo ao WHERE recupera N3, mas continua perdendo N2.

Quando a condição temporal integra o ON, nenhum pagamento elegível corresponde a N2. A junção externa preserva sua linha, como também preserva N3. A agregação devolve uma linha por nota, com R$ 300, zero, zero e R$ 400 no período.

Os R$ 700 de pagamentos conferem nas três consultas. Logo, esse total isolado não demonstra cobertura das notas. Os R$ 2.300 resultantes de subtrair pagamentos do período do valor das notas tampouco representam dívida atual, pois existem pagamentos anteriores deliberadamente fora do recorte.

O pacote inclui duas bases, consultas e resultados esperados. A documentação SELECT do SQLite explica a ordem entre ON, linhas nulas e WHERE. Essa cobertura deve ser examinada na assistência técnica contábil.

Falar pelo WhatsApp