Logic functions should be cascade-able so that one's output can feed another's input in a logical string. The OP's proposed **NOT** construction fails to be cascade-able because reference point for input differ from the reference point for output.<br>

However, such a construction is possible at the beginning or end of a cascade, where no other logic need be driven. At the end of a logic cascade, we have freedom to choose the reference point. For cascaded logic strings, the reference point is always the same (most often GND).<br>

An example:<br>
Suppose we wish to drive an indicator like a LED. We have a choice to reference the LED to *logic low* or to *logic high*...that is, to GND or to Vdd. The choice of reference point allows us to invert the LED's indicator function:

<!-- Begin schematic: In order to preserve an editable schematic, please
     don't edit this section directly.
     Click the "edit" link below the image in the preview instead. -->

![schematic](https://i.sstatic.net/mLhOQM8D.png)

<!-- End schematic -->