The difference is this:
Running a script starts a new shell, with a new environment. When the
script is done. that shell exits and any variables that were set in that
shell are gone.
Sourcing a script runs the script in the current shell, thus it shares
the variables with your current shell session, When the script exits,
any variables it set are still set since they were set in your current
environment.