Suponiendo que no haya valores nulos, GROUP BY
las columnas únicas y SELECT
el MIN (or MAX)
RowId como la fila a conservar. Luego, simplemente elimine todo lo que no tenía una identificación de fila:
DELETE FROM MyTable
LEFT OUTER JOIN (
SELECT MIN(RowId) as RowId, Col1, Col2, Col3
FROM MyTable
GROUP BY Col1, Col2, Col3
) as KeepRows ON
MyTable.RowId = KeepRows.RowId
WHERE
KeepRows.RowId IS NULL
En caso de que tenga un GUID en lugar de un número entero, puede reemplazar
MIN(RowId)
con
CONVERT(uniqueidentifier, MIN(CONVERT(char(36), MyGuidColumn)))