どちらを選択する場合でも、短いコードが常に最適なコードであるとは限らないことに注意してください。多くの場合、十分に発散したロジックがある場合、結果を結合することが実際に最も最適な(場合によってはプログラム的に最もクリーンな)オプションです。
そうは言っても、WHERE句の次のORは、両方のケースをカバーしているようです...
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")