No, they're not equivalent and as such the results will almost always1 be different.
Let's see what each of those switches does:
‘-L’ ‘--files-without-match’ Suppress normal output; instead print the name of each input file from which no output would normally have been printed.
This should be simple:
grep -L 'pattern' ./*
prints the name of each file that does not contain any line matching 'pattern'.
‘-v’ ‘--invert-match’ Invert the sense of matching, to select non-matching lines.
This should be very simple too:
grep -v 'pattern' ./*
prints all lines not matching 'pattern' from each file.
‘-l’ ‘--files-with-matches’ Suppress normal output; instead print the name of each input file from which output would normally have been printed.
Again, simple:
grep -l 'pattern' ./*
prints the name of each file that contains at least one line matching 'pattern'.
Now, what happens when combining -v and -l ? It's not much different from grep -l, except that it selects the non-matching lines hence
grep -vl 'pattern' ./*
prints the name of each file that contains at least one line not matching 'pattern'.
So, note the difference:
grep -L prints the file name only if there is no line matching 'pattern'
grep -vl prints the file name only if there is at least one line not matching 'pattern'
1:
based on the above, it's easy to see when could these two commands produce the same output:
-either when the file is not empty and all lines match the pattern - in which case there will be no output
-or when the file is not empty and no line matches the pattern - in which case it will be listed
Moral of the story: never use grep -vl to emulate grep -L.
If your grep does not support -L, this is the proper way to emulate it.