Тъй като това FROM (SELECT @foo AS foo) се оценява преди това @foo := 1 . По принцип всичко във FROM ще бъде оценено преди вашия SELECT.
Всъщност трябва да е нула, но предполагам, че сте присвоили на променливата на сесията си стойност нула някъде другаде.