With your first design, you could do a join between mls_unified_mvo_svo_tbl and a subquery that groups on mls_unified_mvo_sale_type. E.g.,
select a.mlsnum, b.SaleTypeName, b.NameCount from
mls_unified_mvo_svo_tbl a inner join
(select MlsNum, SaleTypeName, Count(SaleTypeName) as NameCount
from mls_unified_mvo_svo_sale_type inner join sale_type
group by MlsNum, SaleTypeName) b on a.MlsNum = b.MlsNum
where b.SaleTypeName in ('Auction', 'Foreclosure') and b.NameCount > 0;
This join will produce no more than one record for each discrete Sales_Type value, so you can simply select the ones you want and ignore the rest.
HOWEVER, I'm sure the second design will perform a lot better. This is probably one of those times where you trade normalization for performance.