For me, the biggest difference is that if you neither use
& nor use parenthesis, a mistyped subroutine name will be a compile time error (with strict) or warning (with warnings enabled), instead of a run time error.
$ perl -Mstrict -wce 'sub f {1;} &g'
-e syntax OK
$ perl -Mstrict -wce 'sub f {1;} g()'
-e syntax OK
$ perl -Mstrict -wce 'sub f {1;} g'
Bareword "g" not allowed while "strict subs" in use at -e line 1.
-e had compilation errors.
$ perl -wce 'sub f {1;} g'
Unquoted string "g" may clash with future reserved word at -e line 1.
Useless use of a constant (g) in void context at -e line 1.
-e syntax OK
$ perl -Mstrict -wce 'sub f {1;} f'
-e syntax OK
$