No entendi muy bien la duda, pero te comento, cuando he tenido consultas asi, sacar los movimientos de debido y credito de todos los clientes... lo hago por separado, haciendo joins segun el tipo y metiendolos en subqueries...al final con left y tomando como base los clientes obtengo el resultado...
por ejemplo...
Código:
SELECT *
FROM Clientes Cl
Left outer join
(
SELECT IdCliente, [resto de campos]
FROM Creditos
WHERE Miscondiciones
) Cr
On Cl.IdCliente = Cr.IdCliente
Left outer join
(
SELECT IdCliente, [resto de campos]
FROM Debitos
WHERE Miscondiciones
) Db
On Cl.IdCliente = Db.IdCliente
En tu caso si la factura incluye ambos ids creo que deberia ser tu tabla base para que de ahi puedas ligar hacia ambos sentidos...
en fin, depende mucho de lo que quieras obtener para un requerimiento especifico...
pero algo importante y que siempre aplica: con el inner join siempre te traes lo que hace match en ambas tablas, no importa cual vaya primero o cual despues...
y con el left siempre te traes los registros de la tabla que esta a la izquierda, independientemente si hace match con los registros de la derecha...
con el right es similar al left...
por lo que son cosas distintas del inner...
Saludos!