Haroldo, primeiramente obrigado pela resposta tão rápida.
Eu testei a query e deu uma pequena diferença nos valores, contando manualmente as qtdes. Como são poucos registros dá pra contar manual pra conferir.
Adaptando a query para o nome real dos campos ficou assim:
SELECT PV.produto, SUM( PV.qtde ) , SUM( PD.qtde )
FROM pedidos P
INNER JOIN pedidos_itens_atuais PV ON PV.pedido = P.pedido
INNER JOIN pedidos_itens_devolvidos PD ON PD.PEDIDO = P.pedido
WHERE P.data_pedido >= ( SELECT data_inicial FROM campanhas WHERE numero = [campanha] )
AND P.data_pedido <= ( SELECT data_final FROM campanhas WHERE numero = [campanha] )
GROUP BY PV.produto
A questão é que nem sempre todos os produtos constantes na tabela de produtos vendidos (pedidos_itens_atuais) estão também na tabela de produtos devolvidos (pedidos_itens_devolvidos). Acho que por isso a somatória ficou diferente.
Talvez eu tenha que usar uma quinta tabela (tabela de produtos) pra ter certeza de que todos os produtos foram lidos, algo assim.
Na minha contagem manual ficou assim:
Produto/Vendidos/Devolvidos
1 57 24
2 67 48
3 31 1
4 14 5
Pela query ficou assim:
produto SUM( PV.qtde ) SUM( PD.qtde )
1 80 43
2 64 36
3 35 67
4 29 51
De qq forma já serviu como ponto de partida até pra estudo meu de como funciona o inner join, pois não tem jeito de eu aprender esse troço.
Caso tenha algum tempo e possibilidade de dar uma nova olhada, postei o dump das tabelas aqui: http://www.softideias.com/clarajoias/sql.txt. As contagens que citei acima se referem a campanha de número 4.
Muito obrigado mesmo.
Rodrigo