Ah, I see it: your join against relationship_wanted isn't unique.
globalmatch=# select count(*) from personal_data pd
globalmatch-# where pd.gid = 17111 AND pd.gender = 0;count
------- 1
(1 row)
globalmatch=# select count(*) from relationship_wanted rw
globalmatch-# where rw.gid = 17111 AND rw.gender = 0;count
------- 5
(1 row)
globalmatch=#
So that inflates the number of rows coming out of the join by 5.
regards, tom lane