Hola mvlsistemas:
el problema es que tienes dos relaciones 1 a muchos entre tus clientes y tus facturas y al querer unirlas esto se convierte en una relación muchos a muchos... en otras palabras, es una especie de "producto cartesiano" que te puede "repetir" resultados, pero tal como lo comenta libras, en realidad los registros NO ESTÁN REPETIDOS, sino que simplemente no se están presentando como tu quieres.
Una posible "solución" sería utilizar un UNION entre tus facturas para que sólo tengas una tabla, va un ejemplo para ver si queda claro. Supongamos que tenemos estas tablas;
Código MySQL:
Ver original+------------+----------------+
| id_cliente | nombre_cliente |
+------------+----------------+
| 1 | cliente uno |
| 2 | cliente dos |
| 3 | cliente tres |
+------------+----------------+
+------------+------------+-------+
| id_factura | id_cliente | monto |
+------------+------------+-------+
| 1 | 1 | 100 |
| 2 | 1 | 200 |
| 3 | 2 | 300 |
| 4 | 2 | 400 |
| 5 | 3 | 500 |
+------------+------------+-------+
+------------+------------+-------+
| id_factura | id_cliente | monto |
+------------+------------+-------+
| 10 | 1 | 600 |
| 11 | 1 | 700 |
| 12 | 2 | 800 |
| 13 | 2 | 900 |
| 14 | 2 | 1000 |
+------------+------------+-------+
entonces, tal como haces tu consulta, tendrías esto:
Código MySQL:
Ver original -> JOIN factura
AS fac
ON clie.id_cliente
= fac.id_cliente
-> LEFT JOIN facturaa
AS faca
ON clie.id_cliente
= faca.id_cliente
; +------------+----------------+------------+------------+-------+------------+------------+-------+
| id_cliente | nombre_cliente | id_factura | id_cliente | monto | id_factura | id_cliente | monto |
+------------+----------------+------------+------------+-------+------------+------------+-------+
| 1 | cliente uno | 1 | 1 | 100 | 10 | 1 | 600 |
| 1 | cliente uno | 2 | 1 | 200 | 10 | 1 | 600 |
| 1 | cliente uno | 1 | 1 | 100 | 11 | 1 | 700 |
| 1 | cliente uno | 2 | 1 | 200 | 11 | 1 | 700 |
| 2 | cliente dos | 3 | 2 | 300 | 12 | 2 | 800 |
| 2 | cliente dos | 4 | 2 | 400 | 12 | 2 | 800 |
| 2 | cliente dos | 3 | 2 | 300 | 13 | 2 | 900 |
| 2 | cliente dos | 4 | 2 | 400 | 13 | 2 | 900 |
| 2 | cliente dos | 3 | 2 | 300 | 14 | 2 | 1000 |
| 2 | cliente dos | 4 | 2 | 400 | 14 | 2 | 1000 |
+------------+----------------+------------+------------+-------+------------+------------+-------+
11 rows
in set (0.05 sec
)
aquí podrías suponer que hay facturas REPETIDAS, pero en realidad no es así... es más, tal parecería que hay más facturas, ya que aparecen 11 registros mientras que sólo hay 10 facturas.
El problema insisto está en que estás haciendo un doble JOIN... Si bien las dos tablas de facturas están relacionadas con los clientes, en realidad no hay una relación directa entre factura y facturaa directa, por lo tanto, se hace un producto.
¿qué podrías hacer?... podrías cambiar por un UNION para juntar primero todas tus facturas y después hacer el JOIN con los clientes, es decir, algo así:
Código SQL:
Ver originalmysql> SELECT * FROM clientes C
-> INNER JOIN
-> ( SELECT * FROM factura
-> UNION ALL
-> SELECT * FROM facturaa
-> ) T ON C.id_cliente = T.id_cliente;
+------------+----------------+------------+------------+-------+
| id_cliente | nombre_cliente | id_factura | id_cliente | monto |
+------------+----------------+------------+------------+-------+
| 1 | cliente uno | 1 | 1 | 100 |
| 1 | cliente uno | 2 | 1 | 200 |
| 1 | cliente uno | 10 | 1 | 600 |
| 1 | cliente uno | 11 | 1 | 700 |
| 2 | cliente dos | 3 | 2 | 300 |
| 2 | cliente dos | 4 | 2 | 400 |
| 2 | cliente dos | 12 | 2 | 800 |
| 2 | cliente dos | 13 | 2 | 900 |
| 2 | cliente dos | 14 | 2 | 1000 |
| 3 | cliente tres | 5 | 3 | 500 |
+------------+----------------+------------+------------+-------+
10 ROWS IN SET (0.00 sec)
Pero OJO, para hacer el UNION, las tablas deben tener el mismo numero de campos, así es que deberás tener cuidado con la selección.
Saludos
Leo.