Guau .... pues por principio de cuentas creo que tienes varios paréntesis que marean un poco y me da la impresión de que tienes una ligera inconsistencia ... pues estas relacionando el campo codpostal.cp con 2 campos; empresas.cp y empresas.cpreal ... supongo que esa es la razón por la que tu vista está arrojando nulls.
Si estoy entendiendo bien tu planteamiento ... tu solución sería algo como esto (solo la parte del query, el resto es integrarlo en la construcción de la vista):
Código:
SELECT -datosvariosdeempresa-
FROM empresas e
LEFT JOIN codpostal c
ON e.cp = c.cp
AND e.cpreal = c.NOMBRE_DEL_CAMPO_PARA_CPREAL
creo que con eso debe de funcionar, si no funciona dime y lo arreglamos
... suerte