The main difference is that the default value of the method argument has changed.
It's not common knowledge, but the default value of a method argument can be any ruby expression. In this case, we use the default argument to define a local variable named a.
The only way that a can evaluate to true in this method is if no argument was provided, because that is the only way the default argument will be evaluated and a will be defined to true.
If you provide a nil argument to this method, v will be set to nil, but a will be nil instead of true, so you will still get the numeric expression instead of the column all.