Su código se está comportando como se esperaba. El procedimiento se llama a sí mismo recursivamente .
Si no quieres eso, prueba esto:
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
Si quieres para usar la recursividad, debe definir un caso base (AKA "condición de salida") que hará que el procedimiento almacenado salga de la pila de recursividad.