Разница в том, что отсутствующее имя переменной передается блоку.
В вашем примере результат тот же, потому что вы не используете полученную строку, но попробуйте это, чтобы увидеть разницу:
ENV.fetch("RAILS_MAX_THREADS", 5)
#=> 5
ENV.fetch("RAILS_MAX_THREADS") { |missing_name| "Could not find env var named " + missing_name }
#=> "Could not find env var named RAILS_MAX_THREADS"