Fordi denne FROM (SELECT @foo AS foo)
evalueres før denne @foo := 1
. Grundlæggende vil alt i FROM blive evalueret før dit SELECT.
Den burde faktisk være nul, men jeg gætter på, at du har tildelt din sessionsvariabel en værdi på nul et andet sted.