Hola heberthm:
No nos pones datos de ejemplo de tus tablas, pero mucho ojo, el que tu consulta muestre datos "repetidos" no necesariamente significa que se esté realizando un producto cartesiano...
lo primero que debes verificar es cuál es la cardinalidad entre tus tablas, si por ejemplo, tienes una relación 1 a 1, entonces una manera de verificar el si se está realizando un producto cartesiano es contando el número de registro que aparecen en la consulta final, el número de registros NO DEBE SER MAYOR AL NÚMERO DE REGISTROS EN CUALQUIERA DE TUS TABLAS. Checa este ejemplo:
Código SQL:
Ver originalmysql> SELECT *
-> FROM tabla_1;
+-----------+-------------+
| id_tabla1 | descripcion |
+-----------+-------------+
| 1 | uno |
| 2 | dos |
| 3 | tres |
+-----------+-------------+
3 ROWS IN SET (0.00 sec)
mysql> SELECT *
-> FROM tabla_2;
+-----------+-------------+
| id_tabla2 | descripcion |
+-----------+-------------+
| 1 | one |
| 2 | two |
| 3 | three |
+-----------+-------------+
3 ROWS IN SET (0.00 sec)
mysql> SELECT * FROM tabla_1
-> INNER JOIN tabla_2 ON tabla_1.id_tabla1 = tabla_2.id_tabla2;
+-----------+-------------+-----------+-------------+
| id_tabla1 | descripcion | id_tabla2 | descripcion |
+-----------+-------------+-----------+-------------+
| 1 | uno | 1 | one |
| 2 | dos | 2 | two |
| 3 | tres | 3 | three |
+-----------+-------------+-----------+-------------+
3 ROWS IN SET (0.00 sec)
Sin embargo, si tienes una relación 1 a muchos, puedes tener INFORMACIÓN "REPETIDA" pero esto no quiere decir que se esté haciendo un producto cartesiano, checa este ejemplo:
Código MySQL:
Ver original+-----------+-------------+
| id_tabla1 | descripcion |
+-----------+-------------+
| 1 | uno |
| 2 | dos |
| 3 | tres |
+-----------+-------------+
+-----------+-------------+
| id_tabla2 | descripcion |
+-----------+-------------+
| 1 | one |
| 1 | un |
| 1 | eins |
| 2 | two |
| 2 | deux |
| 2 | zwei |
| 3 | three |
| 3 | trois |
| 3 | drei |
+-----------+-------------+
-> INNER JOIN tabla_2
on tabla_1.id_tabla1
= tabla_2.id_tabla2
; +-----------+-------------+-----------+-------------+
| id_tabla1 | descripcion | id_tabla2 | descripcion |
+-----------+-------------+-----------+-------------+
| 1 | uno | 1 | one |
| 1 | uno | 1 | un |
| 1 | uno | 1 | eins |
| 2 | dos | 2 | two |
| 2 | dos | 2 | deux |
| 2 | dos | 2 | zwei |
| 3 | tres | 3 | three |
| 3 | tres | 3 | trois |
| 3 | tres | 3 | drei |
+-----------+-------------+-----------+-------------+
en este caso, las descripciones en español se están "repitiendo", pero esto no quiere decir que entre las tablas haya un PRODUCTO CARTESIANO, sino que esto es perfectamente normal debido a que hay una relación 1 a muchos entre las tablas...
entonces, ¿cuando ocurre un producto cartesiano? cuando un registro de una tabla se "combina" o se relaciona CON TODOS LOS REGISTROS DE OTRA TABLA... haya o no haya una relación entre ellos... es decir, algo así:
Código MySQL:
Ver original+-----------+-------------+-----------+-------------+
| id_tabla1 | descripcion | id_tabla2 | descripcion |
+-----------+-------------+-----------+-------------+
| 1 | uno | 1 | one |
| 2 | dos | 1 | one |
| 3 | tres | 1 | one |
| 1 | uno | 1 | un |
| 2 | dos | 1 | un |
| 3 | tres | 1 | un |
| 1 | uno | 1 | eins |
| 2 | dos | 1 | eins |
| 3 | tres | 1 | eins |
| 1 | uno | 2 | two |
| 2 | dos | 2 | two |
| 3 | tres | 2 | two |
| 1 | uno | 2 | deux |
| 2 | dos | 2 | deux |
| 3 | tres | 2 | deux |
| 1 | uno | 2 | zwei |
| 2 | dos | 2 | zwei |
| 3 | tres | 2 | zwei |
| 1 | uno | 3 | three |
| 2 | dos | 3 | three |
| 3 | tres | 3 | three |
| 1 | uno | 2 | trois |
| 2 | dos | 2 | trois |
| 3 | tres | 2 | trois |
| 1 | uno | 3 | drei |
| 2 | dos | 3 | drei |
| 3 | tres | 3 | drei |
+-----------+-------------+-----------+-------------+
27 rows
in set (0.00 sec
)
esto SI ES UN PRODUCTO CARTESIANO.
Postea algunos datos de ejemplo de tus tablas para poder revisar.
Saludos
Leo.