Ciao spero di essere di aiuto..

non capisco perchè devi testare nella query il parametro a null....
e perche esegui la stringa con l'execute che è molto meno performante della select ( non viene compilato l'execurtion plan e quindi tutte le volte è come sela creassi nuova... )

comunque se devi farla così pensso che :

La stored tu la richiami con "[***].[GetListino] 'parametro '" giusto ?
Quindi non credo che tu possa passare il valore NULL ma più semplicemente '' ( è un varchar ) e poi inserire la clausola

WHERE (tblCatProd.ID =@IDCP )
and ( @IDCP = '' OR tblCatProd.ID is null)

magari gestendo il NULL dal codice che richiama la stored per impostare ''
tblCatProd.ID è definito come varchar vero ? se è un INT o simile la query si può fare in modo diverso....

questa la farei così

ALTER Procedure [***].[GetListino] (
@IDCP varchar(50)

)
AS
SET NOCOUNT ON

SELECT tblCatProd.Categoria
FROM tblCatProd

WHERE tblCatProd.ID =@IDCP
and ( @IDCP = '' OR tblCatProd.ID is null)

ORDER BY tblCatProd.ID ASC'

EXECUTE(@strSQL)

SET NOCOUNT OFF


ciao
GO