When cat is not given a filename on the command line (or if the filename is just -), then it switches to reading from its standard input.
That means that with
cat <<END something something END cat will notice that it was not given a filename and will proceed to read from the here-document, which is arriving on its standard input stream.
You can get cat to read from both its standard input and from a file with
cat - filename <<END something something END This will cause the contents of the here-document to be concatenated with the contents of filename. If the order of the arguments was filename - then that would be the order that the data would be concatenated too.
Note that - is not special in any way, and is handled in this way specifically by the cat utility. If you have an actual file called - that you need to run cat on, use cat ./-.
For all purposes, you can think of feeding a here-document directly into a utility as a shorthand for creating a temporary file and then invoking the utility with that attached to the standard input stream:
printf 'some contents' >tmpfile utility <tmpfile rm -f tmpfile Here-documents may not be implemented this way (it may be a FIFO (named pipe)), but that's not an entirely incorrect way of thinking about it.