GROUP BY along with HAVING count(*)>1 will give results where more than one row satisfies the grouping. That’s essentially the practical definition of “duplicate”.
But it can depend on exact requirements. A SELECT DISTINCT is intended to filter out duplications of entire rows. First question to answer should focus on the source of the duplicates.
Are these rows logical duplicates in a result set that come perhaps through various JOINs or UNIONs? Or are they physically present in source tables?