Distinct will only work as deduplication if every field value is the same. In the case where you have the same email address but other field values are different it wont work.
You can use Partition By, example below. This will deduplicate based on email address and assigns a row number to every email address that exists. For a email address existing multiple times there will be multiple row numbers. I've selected in the where clause where row number = 1, so only 1 record for a email address is selected.
Using the order by you can specify any dedupe requirements. Often if you have a date field you might want to order by date Asc/Desc then the newest/oldest record can be selected for a particular email address.
SELECT
x.SubscriberKey,
x.EMAIL_ADDRESS,
x.RowNumber
FROM
(
SELECT
s.SubscriberKey
s.EMAIL_ADDRESS,
ROW_NUMBER() OVER(PARTITION BY s.EMAIL_ADDRESS ORDER BY s.EMAIL_ADDRESS) AS RowNumber
FROM audience_selection_de s
Where ID = 'xxxx'
) x
WHERE x.RowNumber = 1