Hola proteus8:
Poco hay que agregar al comentario que te hace el compañero iislas, estoy completamente de acuerdo en que es mejor utilizar el operador EXISTS. Sólo habría que complementar que la forma en que está comparando los registros (es decir con el operador + para concatenar) es válido sólo entre campos de tipo caracter. Es posible que en tu tabla tengas tanto campos tipo caracter como campos tipo numérico por lo tanto tendrías que aplicar conversiones o en su defecto comparar campo por campo, es decir algo como esto:
Código SQL:
Ver originalDECLARE @TablaUno TABLE (id INT, descripcion VARCHAR(50))
INSERT INTO @TablaUno VALUES (1, 'UNO')
INSERT INTO @TablaUno VALUES (2, 'DOS')
INSERT INTO @TablaUno VALUES (3, 'TRES')
SELECT * FROM @TablaUno
DECLARE @TablaDos TABLE (id INT, descripcion VARCHAR(50))
INSERT INTO @TablaDos VALUES (3, 'TRES')
INSERT INTO @TablaDos VALUES (4, 'CUATRO')
INSERT INTO @TablaDos VALUES (5, 'CINCO')
--Comparando campo por campo
DELETE @TablaUno FROM @TablaUno T1
WHERE EXISTS (
SELECT * FROM @TablaDos T2 WHERE T1.id = T2.id AND T1.descripcion = T2.descripcion
)
SELECT * FROM @TablaUno
--Aplicando conversión de tipos
DELETE @TablaUno FROM @TablaUno T1
WHERE EXISTS (
SELECT * FROM @TablaDos T2 WHERE CAST(T1.id AS VARCHAR) + T1.descripcion =
CAST(T2.id AS VARCHAR) + T2.descripcion
)
SELECT * FROM @TablaUno
Te repito que es sólo un detalle que hay que considerar.
Saludos
Leo.