You're misunderstanding the EXISTS predicate.
Your subquery:
SELECT field1, field2, count(*)
from Table2
group by field1, field2
having count(*) > 10
will return a resultset listing all the field1, field2 combinations (and their count) which have more than 10 rows in your table. If you run it all by itself, you should see a listing of all the rows which have a count greater than 10.
Presumably there is at least one row in this resultset.
The EXISTS predicate returns true if the subquery as its argument has any rows at all in it. In your case it does, so the predicate is true for every row in the main SELECT query. You are selecting the TOP 100 rows of this, which presumably has at least one set of rows with a count less than 10, which is what you are seeing.
Usually, you use a correlated subquery as the argument of the EXISTS clause.
Something like:
INSERT INTO Table1
SELECT TOP 100 *
FROM Table2 T0
WHERE EXISTS (SELECT T1.field1, T1.field2, count(*)
from Table2 T1
where T0.field1 = T1.field1 AND T0.field2 = T1.field2
group by T1.field1, T1.field2
having count(*) > 10)
Jeff Mason
Custom Apps, Inc.
www.custom-apps.com