The Lazy Spool logical operator stores each row from its input in a hidden temporary object stored in the tempdb database. If the operator is rewound (for example, by a Nested Loops operator) but no rebinding is needed, the spooled data is used instead of rescanning the input. If rebinding is needed, the spooled data is discarded and the spool object is rebuilt by rescanning the (rebound) input.
The Lazy Spool operator will build its spool file in a lazy (noneager) manner. Each time the spool’s parent operator asks for a row, the spool operator gets a row from its input operator and stores it in the spool.