SQL básico para contabilistas e auditores
Introdução ao SQL para contabilistas e auditores: SELECT, filtros, agregações e junções aplicados a razão, facturas e testes de auditoria.
SQL é a linguagem usada para consultar bases de dados. Quase todos os programas de contabilidade guardam os dados em bases deste tipo, e um auditor que sabe fazer perguntas directamente aos dados trabalha com a população completa em vez de uma amostra. Bastam cinco comandos para começar.

Porque é útil a quem trabalha com números
O Excel tem limites de linhas e torna-se lento com ficheiros grandes. Uma base de dados aguenta milhões de movimentos e responde em segundos. Além disso, uma consulta SQL fica escrita: pode ser repetida no ano seguinte, revista por um colega e anexada ao dossiê de trabalho como evidência do procedimento.
Para estudantes, o SQL é também uma boa forma de perceber como os dados contabilísticos se organizam: tabelas de contas, de lançamentos, de terceiros, ligadas entre si por códigos.
Uma base de dados em três tabelas
Imagine um pequeno modelo com estas tabelas (nomes ilustrativos):
- contas(codigo, nome, classe)
- lancamentos(id, data, conta, terceiro, debito, credito, descricao)
- terceiros(codigo, nome, nif)
Cada linha de lancamentos é um movimento. A coluna conta aponta para o código em contas; a coluna terceiro aponta para terceiros. Estas ligações chamam-se chaves.
Os cinco comandos essenciais
- SELECT escolhe as colunas a mostrar.
- FROM indica a tabela.
- WHERE filtra linhas segundo uma condição.
- GROUP BY agrupa linhas para somar, contar ou calcular médias.
- ORDER BY ordena o resultado.
Exemplo: listar todos os movimentos de Março, do maior para o menor valor a débito.
SELECT data, conta, debito FROM lancamentos WHERE data BETWEEN '2025-03-01' AND '2025-03-31' ORDER BY debito DESC;
Somar e contar: funções de agregação
As funções SUM, COUNT, AVG, MIN e MAX resumem muitas linhas num número. Combinadas com GROUP BY, produzem balancetes em segundos:
SELECT conta, SUM(debito) AS total_debito, SUM(credito) AS total_credito FROM lancamentos GROUP BY conta ORDER BY conta;
Se o total de débitos não for igual ao total de créditos, há um erro de integridade nos dados, e esse é um teste de auditoria básico que se faz numa linha.
Juntar tabelas: o comando JOIN
Para mostrar o nome da conta em vez do código, junta-se lancamentos a contas:
SELECT c.nome, SUM(l.debito - l.credito) AS saldo FROM lancamentos l JOIN contas c ON l.conta = c.codigo GROUP BY c.nome;
O prefixo l e c são apelidos das tabelas, que tornam a consulta mais curta. Atenção: se a ligação for mal feita, o JOIN pode duplicar linhas e inflacionar totais. Compare sempre o resultado com o balancete.
Testes de auditoria que o SQL faz bem
- Duplicados: mesma factura, mesmo fornecedor e mesmo valor lançados duas vezes (GROUP BY com HAVING COUNT maior que 1).
- Quebras de sequência: números de documentos em falta numa série.
- Valores redondos ou imediatamente abaixo de um limite de aprovação, que merecem pergunta.
- Lançamentos em dias não úteis ou fora de horas.
- Terceiros sem NIF ou com NIF repetido.
- Datas fora do período contabilístico.
Estes testes não provam fraude; apontam para itens a investigar. A conclusão exige sempre análise do documento de suporte e conversa com a gestão.
Exemplo resolvido: procurar pagamentos duplicados
Suponha que a tabela de pagamentos tem fornecedor, número de factura e valor. A consulta agrupa por estes três campos e mantém só os grupos com mais de uma linha. Se aparecer o fornecedor X, factura 215, valor 240 000 Kz, duas vezes, o auditor pede os extractos bancários para ver se o dinheiro saiu duas vezes ou se foi apenas um registo repetido. Valores ilustrativos.
Ler o resultado com espírito crítico
Uma consulta devolve o que lhe pediu, não o que quis dizer. Por isso, antes de tirar conclusões, faça três verificações. Primeiro, conte as linhas: o número de movimentos devolvido é o esperado? Segundo, some os valores e compare com um total conhecido, como o balancete ou o saldo do extracto. Terceiro, escolha dois ou três itens ao acaso e confirme-os no documento original.
Um erro típico é filtrar por data sem incluir o último dia do período, ou comparar datas guardadas como texto, o que dá ordenações estranhas. Outro é esquecer que um lançamento pode ter várias linhas e que, ao contar linhas, está a contar partidas e não documentos. Para contar documentos, use COUNT(DISTINCT numero_documento).
Quando o resultado for surpreendente, desconfie primeiro da consulta e só depois do cliente. Muitas "fraudes" encontradas por um auditor principiante são, na verdade, erros de junção ou de filtro.
Boas práticas e cuidados
- Trabalhe sobre uma cópia dos dados; consultas de leitura (SELECT) não alteram nada, mas comandos como UPDATE e DELETE sim.
- Documente cada consulta: objectivo, data, origem dos dados, resultado.
- Confirme os totais com um relatório conhecido antes de confiar na consulta.
- Respeite a confidencialidade e as regras de acesso à informação.
- Comece com poucas linhas (LIMIT) para ver se a consulta faz o que pensa.
Como praticar
Pode instalar gratuitamente uma base de dados leve, como SQLite, e importar um ficheiro CSV com o razão de um exercício. Resolva cinco desafios: totais por conta, movimentos de um mês, maiores 10 lançamentos, duplicados e saldo por terceiro. Em duas semanas, com meia hora por dia, ganha fluência suficiente para pedir dados à equipa de informática com precisão e para testar a sua própria contabilidade.
Precisa de apoio de contabilidade para a sua empresa?
Se, além de estudar, tem ou vai abrir um negócio, a Contas Organizadas trata da contabilidade, da fiscalidade e da folha de salários. Fale connosco.
Perguntas frequentes
É preciso ser informático para aprender SQL?
Não. A sintaxe é próxima do inglês e os primeiros comandos aprendem-se em horas. O difícil é saber que perguntas fazer, e isso é conhecimento de contabilidade.
SQL substitui o Excel?
Não, complementam-se. O SQL extrai e agrega grandes volumes; o Excel serve para análise final, gráficos e apresentação.
Posso estragar a base de dados da empresa?
Com comandos de leitura, não. Mesmo assim, peça acesso só de leitura ou trabalhe numa cópia, e nunca execute UPDATE ou DELETE sem autorização.