The nullglob option (which BTW is a zsh invention, only added years later to bash (2.0))option¹ would not be ideal in a number of cases. And ls is a good example:
With nullglob on would run ls with no argument which is treated as ls -- . (list the current directory) if no files match, which is probably worse than calling ls with a literal *.txt as argument¹argument².
bash (since version 3) has a failglob option for that (interesting to this discussion, since contrary to ash, AT&T ksh or zsh, bash doesn't support local scopes for options²options³, that option when enabled globally does break a few things like the bash-completion functions).
¹ added in 2.0 in 1996 with the introduction of the shopt builtin, named after zsh's equivalent option, though bash had the allow_null_glob_expansion variable for that in earlier versions
² for which ls would likely report an error that the *.txt file doesn't exist, unless it has been created in the interval, or the current directory happens to be searchable but not readable and that file or directory exists. Try after mkdir -p '*.txt/wtf'; chmod a=,u=wx . for instance
²³ version 4.4 saw some improvement on that front in that options set by set -o could be made local to functions with local - like in the Almquist shell, but that doesn't work for bash's second set of options, the ones set with shopt