The bash manual has this to say in the 3.6 Redirections section:
The word following the redirection operator in the following descriptions, unless otherwise noted, is subjected to brace expansion, tilde expansion, parameter expansion, command substitution, arithmetic expansion, quote removal, filename expansion, and word splitting. If it expands to more than one word, Bash reports an error.
sh does not do that;that: from the POSIX shell specification
If the redirection operator is "
<<" or "<<-", [...]. For the other redirection operators, the word that follows the redirection operator shall be subjected to tilde expansion, parameter expansion, command substitution, arithmetic expansion, and quote removal. Pathname expansion shall not be performed on the word by a non-interactive shell; an interactive shell may perform it, but shall do so only when the expansion would result in one word.
$ dash $ echo foo > * $ ls '*' README.md ... $ bash $ echo bar >> * bash: *: ambiguous redirect