Was auch immer Sie wählen, seien Sie sich bewusst, dass der Kurzcode nicht immer der optimale Code ist. In vielen Fällen, in denen Sie eine ausreichend divergierende Logik haben, ist das Zusammenführen der Ergebnisse wirklich die optimalste (und manchmal sauberste, programmatisch) Option.
Das folgende OR in der WHERE-Klausel scheint jedoch beide Fälle abzudecken ...
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")