Hola th3r0rn:
En tu select estás tomando sólo algunos de los campos de tus tablas, pero me imagino que además de estos tienes algunos más. Al no mostrar todos los campos que intervienen en tu tabla puede resultar complicado determinar si te falta declara alguna relación entre tus tablas. Te pongo un ejemplo para ver si se entiende:
Código SQL:
Ver originalDECLARE @Tabla1 TABLE (id1 INT, id2 INT, descripcion VARCHAR(50))
INSERT INTO @Tabla1 VALUES(1, 1, 'uno')
INSERT INTO @Tabla1 VALUES(2, 2, 'dos')
INSERT INTO @Tabla1 VALUES(3, 3, 'tres')
DECLARE @Tabla2 TABLE (id1 INT, id2 INT, descripcion VARCHAR(50))
INSERT INTO @Tabla2 VALUES(1, 1, 'UNO-UNO')
INSERT INTO @Tabla2 VALUES(1, 2, 'UNO-DOS')
INSERT INTO @Tabla2 VALUES(1, 3, 'UNO-TRES')
INSERT INTO @Tabla2 VALUES(2, 1, 'DOS-UNO')
INSERT INTO @Tabla2 VALUES(2, 2, 'DOS-DOS')
INSERT INTO @Tabla2 VALUES(2, 3, 'DOS-TRES')
INSERT INTO @Tabla2 VALUES(3, 1, 'TRES-UNO')
INSERT INTO @Tabla2 VALUES(3, 3, 'TRES-TRES')
SELECT T1.id1, T1.id2, T1.descripcion FROM @Tabla1 T1
INNER JOIN @Tabla2 T2 ON T1.id1 = T2.id1
Si ejecutas este script te regresa lo siguiente:
Código:
id1|id|descripcion|descripcion
---------------------------------------
1|1|uno
1|1|uno
1|1|uno
2|2|dos
2|2|dos
2|2|dos
3|3|tres
3|3|tres
Si observas aquí se están repitiendo los registros, pero como hice sólo un select sobre los campos de la primer tabla no puedo determinar donde está el error. En estos casos es conveniente que hagas un select *, para obtener la información de todas las tablas que se involucran en la consulta:
Código SQL:
Ver originalSELECT * FROM @Tabla1 T1
INNER JOIN @Tabla2 T2 ON T1.id1 = T2.id1
Con esto obtienes lo siguiente:
Código:
id1|id2|descripcion|id1|id2|descripcion
----------------------------------------------------
1|1|uno|1|1|UNO-UNO
1|1|uno|1|2|UNO-DOS
1|1|uno|1|3|UNO-TRES
2|2|dos|2|1|DOS-UNO
2|2|dos|2|2|DOS-DOS
2|2|dos|2|3|DOS-TRES
3|3|tres|3|1|TRES-UNO
3|3|tres|3|3|TRES-TRES
Creo que con esto es más claro que NO ES QUE SE REPITAN LOS REGISTROS, sino que CADA REGISTRO ES ÚNICO, pero al no declararse la relación con el campo id2 de las tablas se está realizando un producto cartesiano.
De tal manera que la consulta correcta debería ser así:
Código SQL:
Ver originalSELECT * FROM @Tabla1 T1
INNER JOIN @Tabla2 T2 ON T1.id1 = T2.id1 AND T1.id2 = T2.id2
Código:
id1|id2|descripcion|id1|id2|descripcion
----------------------------------------------------
1 1 uno 1 1 UNO-UNO
2 2 dos 2 2 DOS-DOS
3 3 tres 3 3 TRES-TRES
Espero que se entienda más o menos el problema y ojalá que te sea de ayuda
Saludos
Leo.