Destroy is postponed to the end of the frame that is why you still see your guys because on the same frame you print their name and they still exist. Use DestroyImmediate if you absolutely need them off right away.
Destroy actually destroys the object after the Updates and before the frame is rendered. In this case, the children are still alive and kicking when the second foreach is executed - that’s why you still can print their names - but will not exist anymore by the next Update. There’s also the DestroyImmediate function, but it should be used only in Editor scripts.