./setup.sh
runs the script, a new shell will be started that runs the script. That new shell cannot affect the parent shell that started the script.
. ./setup.sh
is a shorthand for source ./setup.sh
and it will run the script in the current shell, instead of starting a new shell to run it. This means the script can alter the behavior of the current shell, e.g. set new environment variables.