I suspect the "problem" stems from the JOIN being defined so "loosely" (for lack of a better description).
Without having your data to run this against, see if this helps:
isnull(cs.CONTSUPREF,'')+isnull(cs.ADDRESS1,'') AS EmailAddress
, isnull(cs.MERGECODES,'') as 'EmailMergeCodes'
FROM contact1 c1
INNER JOIN contsupp cs ON
(c1.ACCOUNTNO = cs.ACCOUNTNO
AND cs.RECTYPE = 'P'
AND cs.CONTACT ='E-Mail Address'
where isnull(C1.Key1,'') in ('zone1','zone2')
AND isnull(C1.Key2,'') in ('Toys','Food')
AND isnull(cs.MERGECODES,'') not like '%ERR%'
AND isnull(cs.mergecodes,'') not like '%OLD%'
ORDER BY C1.CONTACT
I made a number of subjective, immaterial changes as well, just striving for better readability.
Hope this feedback helps. Please let me know if I need to clarify anything.