Eftersom denna FROM (SELECT @foo AS foo)
utvärderas före denna @foo := 1
. I princip allt i FROM kommer att utvärderas innan ditt SELECT.
Den borde egentligen vara noll men jag gissar att du har tilldelat din sessionsvariabel ett värde på noll någon annanstans.