Question: "Is there any difference between the two approaches?"
Answer: No, there is no difference.
Question: "Is one approach more efficient than the other?"
Answer: No, they are both equally efficient.
How do I know this?
Well, in situations like this it's easy to determine the difference by creating a test project and look at the compiled IL (release config).
I created a console application using Visual Studio Community 2015 with .NET 4.5.2. And as a decompiler I used .NET reflector (a free alternative is ILSpy).
VB.NET
Public Sub Test1(condition As Boolean)
If (condition) Then
Else
Console.WriteLine("condition was false.")
End If
End Sub
Public Sub Test2(condition As Boolean)
If (Not condition) Then
Console.WriteLine("condition was false.")
End If
End Sub
Console output:
condition was false.
condition was false.
IL
As stated before, and confirmed below, both methods are identical.
.method public static void Test1(bool condition) cil managed
{
.maxstack 8
L_0000: ldarg.0
L_0001: brtrue.s L_000d
L_0003: ldstr "condition was false."
L_0008: call void [mscorlib]System.Console::WriteLine(string)
L_000d: ret
}
.method public static void Test2(bool condition) cil managed
{
.maxstack 8
L_0000: ldarg.0
L_0001: brtrue.s L_000d
L_0003: ldstr "condition was false."
L_0008: call void [mscorlib]System.Console::WriteLine(string)
L_000d: ret
}