Firstly, the conversation here was a mess, we need to clarify some concepts.
SubViewport inherits from Viewport, which is a fundamental enviornment for anything to be rendered. How? In fact Window actually inherits from Viewport, so everything are under a invisible Viewport. Even the editor itself puts everything under a SubViewport node to render your scene editing view in realtime.
Your project settings related to the viewport were applied implicitly to that hidden Window (again, it inherits Viewport). And the SubViewport node separates its children from the main enviornments while fowarding those settings as if he’s the game.
The stretch mode (disabled, canvas_item, and viewport) are not a property of Viewport to be strict, they only determine how big the rendered image’s size are, and whether to fit it or stretch it. That’s why we use SubViewportContainer, it will display the render result from its child SubViewport, and surely you can decide whether to center it or stretch it etc. using the Control node’s layout properties.
In details, the SubViewport.size property indicates how big the rendered screen are, and SubViewportContainer.stretch decides whether to resize its child SubViewport’s size to its own size or not.