MS Access query complexity on finding duplicates
You'll have to take this with a huge grain of salt, because the following advice is for generic, standards-abiding SQL - which Access is not.
In regular SQL, this is as simple as:
select dupes.id1, ST1.nam
from (
    select id1
    from ST1
    group by id1
    having count(*) &gt; 1
) dupes
join ST1 on ST1.id1 = dupes.ST1
order by dupes.id1;

Another way to do it without a join at all is a partition (window) function that adds a count column within each group. Unfortunately, the Access idea of a partition diverges significantly from the rest of reality, so this probably isn't possible for you. Regardless, for what it's worth, it would look like
select id1, nam
from (
    select id1, nam,
           count(*) over (partition by id1) as n
    from ST1
)
where n &gt; 1
order by id1;

If at all possible, consider moving away from Access. It introduces more problems than it solves.