t sql "select case" vs "if ... else" y explicación sobre "begin"

Tengo pocas experiencias con t sql y tengo que escribir un archivo almacenado.

Este es mi almacenado:

USE myDatabase
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[myStored]
(
@myPar1 INT,
@myPar2 SMALLDATETIME
)

AS

BEGIN
  SET NOCOUNT ON

  IF EXISTS (
            SELECT 
            1 

            FROM 
            myTable1 

            WHERE 
            myPar1 = @myPar1
            AND myPar2 = @myPar2
            )

    BEGIN
      DELETE FROM  
      myTable1  

      WHERE 
      myPar1 = @myPar1
      AND myPar2 = @myPar2
    END

  ELSE 

    IF EXISTS (
              SELECT 
              1 

              FROM 
              myTable2 

              WHERE 
              myPar2 = @myPar2
              )

      BEGIN
        INSERT INTO  
        myTable1
        (myField1, myField2, myField3, myField4)

        VALUES
        (@myPar1, @myPar2, '', 1)
      END    

    ELSE

      IF EXISTS (
                SELECT 
                1 

                FROM 
                myTable3 

                WHERE 
                myPar2 = @myPar2
                )

        BEGIN
          INSERT INTO  
          myTable1
          (myField1, myField2, myField3, myField4)

          VALUES
          (@myPar1, @myPar2, '', 1)
        END
END

Y estas son mis preguntas:

1 - ¿Hay errores macroscópicos?

2 - Alguien sugiere usar "SELECCIONAR CASO" a otra persona para usar "SI ... ELSE", ¿cuál es la diferencia? ¿Y cuál es la mejor opción para mi almacenado?

3 - No estoy seguro del uso de la declaración "BEGIN ... END", en particular en combinación con la declaración "IF ... ELSE". Qué significa eso? ¿Es necesario poner "BEGIN ... END" dentro de la declaración "IF ... ELSE"? También para ejecutar una sola instrucción?

Respuestas a la pregunta(3)

Su respuesta a la pregunta