Uanset hvad du vælger, skal du være opmærksom på, at kort kode ikke altid er optimal kode. I mange tilfælde, hvor du har tilstrækkeligt divergerende logik, er forening af resultaterne virkelig den mest optimale (og nogle gange mest rene, programmæssigt) mulighed.
Når det er sagt, ser det ud til, at følgende OR i WHERE-sætningen dækker begge dine tilfælde...
SELECT DISTINCT
shops.*,
DA.delivery_cost,
DA.postcode AS AreaPostcode
FROM
shops
INNER JOIN
shops_delivery_area as DA
ON (DA.shop_id = shops.id)
WHERE
(DA.postcode = "Liverpool")
OR
(DA.postcode = shops.postcode AND shops.location = "Liverpool")