I'd write the query starting from the members table. While it doesn't actually matter which way you inner join things (it may matter with outer joins), I find it easier to start with what I have: one member and go from there towards what I want.
SELECT ...
FROM member m
-- you want the coordinates for the members postcode
INNER JOIN postcode p ON m.postcode = p.postcode
-- and then all postcodes inside a given radius from the first coordinate
INNER JOIN postcode in_radius ON (calculate_distance()) < @distance
-- for one specific member
WHERE m.id = @member_id
Furthermore, I'd also ditch the p.postcode != in_radius.postcode and instead not select anything from p, but only from in_radius. That way, you don't have the members postcode and coordinates on every single row of the table like this
members_postcode members_gridN members_gridE in_radius.postcode ...
So, also modify the select part of your query
SELECT in_radius.postcode, in_radius.gridN, in_radius.gridE