Delete records if not present in subquery
Use the "not in", and don't refer to the outer query:

delete from prices
where (sku,id) Not in (
    select p2.sku, p2.id
    from prices p2
        where p2.valid_to &gt;= CURRENT_DATE
        and p2."type" = 'regular'
)