Personally, I don't like this approach, but it seems to be the only solution I have right now, and it also works with mixed cases:
select * from test t
where
email_address in
(
select email_address from test group by email_address having count(email_address)> 1
)
and left(email_address, charindex('@', email_address) -1 ) collate SQL_Latin1_General_CP1_CS_AS
not in (select left(email_address, charindex('@', email_address) -1 ) from test
where email_address collate SQL_Latin1_General_CP1_CS_AS <> t.email_address )
p / s: u need to replace "test" with your actual table name