Porque este FROM (SELECT @foo AS foo) se evalúa antes de este @foo := 1 . Básicamente, cualquier cosa en FROM se evaluará antes de SELECCIONAR.
En realidad, debería ser nulo, pero supongo que ha asignado a su variable de sesión un valor de cero en otro lugar.