User can search by Postcode (eg: L14, L15, L16) or Location from a textbox.
If user type in \"Liverpool\", it will find all the shops that are located in \"Liverpool
Since all tables and selected columns are the same, you can simply do this:
SELECT DISTINCT shops.*, DA.delivery_cost, DA.postcode AS AreaPostcode FROM shops
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")
Like you said in Diego's answer, the conditions are a litle different! So, you compensate that difference in the WHERE clause
.