Avoiding null comparisons in where clause
If you have an index on DestinationCountry,BeginPostCode,ENDPOSTCODE then your original query seeks into the DestinationCountry part but no further.

You may find better performance rewriting as an UNION ALL if you have that index. 

The below can seek into non overlapping parts of this index.


An exact seek on (DestinationCountry, BeginPostCode, ENDPOSTCODE) =  (@COUNTRY,NULL, NULL)
An exact seek on (DestinationCountry, BeginPostCode, ENDPOSTCODE) =  (@COUNTRY,NULL,  @POSTCODE)
An equality seek on (DestinationCountry) =  (@COUNTRY) and then a range seek on the secondary key BeginPostCode &lt;= @POSTCODE with a residual predicate on all rows that match.


__

WITH Country
     AS (SELECT *
         FROM   dbo.DpdRoute
         WHERE  DestinationCountry = @COUNTRY) 
SELECT *
FROM   Country
WHERE  BeginPostCode IS NULL
       AND ENDPOSTCODE IS NULL
UNION ALL
SELECT *
FROM   Country
WHERE  BeginPostCode IS NULL
       AND ENDPOSTCODE = @POSTCODE
UNION ALL
SELECT *
FROM   Country
WHERE  BeginPostCode &lt;= @POSTCODE
       AND ( ENDPOSTCODE &gt;= @POSTCODE
              OR ( BeginPostCode = @POSTCODE
                   AND ENDPOSTCODE IS NULL ) );