ExecuteScalar vs ExecuteNonQuery al devolver un valor de identidad

Tratando de averiguar si es mejor usarExecuteScalar oExecuteNonQuery si quiero devolver la columna de identidad de una fila recién insertada. he leídoesta pregunta y comprendo las diferencias allí, pero al revisar un código que escribí hace unas semanas (mientras tomaba muchos préstamos de este sitio), encontré que en mis inserciones estaba usandoExecuteScalar, al igual que:

public static int SaveTest(Test newTest)
{
    var conn = DbConnect.Connection();
    const string sqlString = "INSERT INTO dbo.Tests ( Tester , Premise ) " +
                             "               VALUES ( @tester , @premise ) " +
                             "SET @newId = SCOPE_IDENTITY(); ";
    using (conn)
    {
        using (var cmd = new SqlCommand(sqlString, conn))
        {
            cmd.Parameters.AddWithValue("@tester", newTest.tester);
            cmd.Parameters.AddWithValue("@premise", newTest.premise);
            cmd.Parameters.Add("@newId", SqlDbType.Int).Direction = ParameterDirection.Output;

            cmd.CommandType = CommandType.Text;
            conn.Open();
            cmd.ExecuteScalar();

            return (int) cmd.Parameters["@newId"].Value;
        }
    }
}

Esto funciona bien para lo que necesito, así que me pregunto

Si debería estar usandoExecuteNonQuery ¿Aquí porque es "más adecuado" para hacer inserciones?¿Recuperar el valor de identidad sería el mismo de cualquier manera ya que estoy usando un parámetro de salida?¿Hay éxitos de rendimiento asociados de una manera u otra?¿Hay generalmente una mejor manera de hacer esto en general?

Estoy usando Visual Studio 2010, .NET 4.0 y SQL Server 2008r2, en caso de que eso haga alguna diferencia.

Respuestas a la pregunta(1)

Su respuesta a la pregunta