Si está utilizando SQL Server 2005 o posterior (y las etiquetas de su pregunta indican SQL Server 2008), puede usar las funciones de clasificación para devolver los registros duplicados después del primero si el uso de combinaciones es menos deseable o poco práctico por alguna razón. El siguiente ejemplo muestra esto en acción, donde también funciona con valores nulos en las columnas examinadas.
create table Table1 (
Field1 int,
Field2 int,
Field3 int,
Field4 int
)
insert Table1
values (1,1,1,1)
, (1,1,1,2)
, (1,1,1,3)
, (2,2,2,1)
, (3,3,3,1)
, (3,3,3,2)
, (null, null, 2, 1)
, (null, null, 2, 3)
select *
from (select Field1
, Field2
, Field3
, Field4
, row_number() over (partition by Field1
, Field2
, Field3
order by Field4) as occurrence
from Table1) x
where occurrence > 1
Observe después de ejecutar este ejemplo que se excluye el primer registro de cada "grupo" y que los registros con valores nulos se manejan correctamente.
Si no tiene una columna disponible para ordenar los registros dentro de un grupo, puede usar las columnas de partición por columnas.