Il tuo codice si sta comportando come previsto. La procedura si chiama ricorsivamente .
Se non lo vuoi, prova questo:
ALTER PROCEDURE dbo.Test
@Value int = null
AS
BEGIN
IF (IsNull(@Value, '') = '')
SELECT 'I am NULL!'
ELSE
SELECT 'I am ' + CONVERT(varchar(20), @Value)
END
GO
EXEC dbo.Test
Se vuoi per utilizzare la ricorsione, devi definire un caso base (AKA "condizione di uscita") che farà uscire la stored procedure dallo stack di ricorsione.