You are right:
source scriptname
will execute the script in current shell
./scriptname
will create a new shell and execute everything there.
also(not related with question though):
source scriptname
and . scriptname
are same but
source scriptname
and ./scriptname
are not.
Otherways:
1) the extra one I mentioned above.
2) exec
3) within () in a script or cmdprompt