Scenario 1:
echo "hello">>welcome.txt git diff
The reason for the confusion is mostly that you're creating a new file that's not already in git. Here the file welcome.txt is not in the git repository so git doesn't know anything about it's history. If there had been a previous version of welcome.txt that was committed you would see differences in this case.
Scenario 2:
git add welcome.txt git diff
In this case you've added the file to the staging area. As far as git diff is concerned this effectively commits the file and git diff will only show you differences between the working copy and the version of welcome.txt in the staging area.
Scenario 3:
As you saw it's not quite true that staging a file is the same as committing it as far as git diff is concerned. You can still pass --cached and you will see the differences between the staging area and the current HEAD.
As Simon said it's mostly about the how git diff interacts with the staging area. Pro Git is Also an excellent online resource for getting started with git.
Edit: Git book entry on treeishes.