You don't need to group by inner query. You can add DISTINCT instead.
SELECT g.email, g.name
FROM guest g
WHERE g.type='guest'
AND g.email NOT IN (SELECT DISTINCT email FROM seeker)
GROUP BY g.email
even this will work
SELECT g.email, g.name
FROM guest g left outer join seeker s on g.email = s.email
WHERE g.type='guest'
AND s.email is null
GROUP BY g.email
There will be a lot of string comparisons in your query, it'd help if you index email in your tables esp. seeker.
Also, avoid using SELECT columns that are non-aggregated and not present in GROUP BY. The result is indeterminate.
The server is free to choose any value from each group, so unless they
are the same, the values chosen are indeterminate. Furthermore, the
selection of values from each group cannot be influenced by adding an
ORDER BY clause.
More in manual.
SELECT DISTINCT emailmight help as well, if there are many duplicate emails in seeker.GROUPwith not all non-aggregated column will remove entries from your list that you may be want...See SQLFIDDLEexplainon the query, you want to minimize "temporary" and "file" steps.