Notice that only express
server knows how to process URL of this kind /post/:id
, next.js
doesn't know it so next.js
tries to prefetch unexistent pages (and you may see in the Chrome console output).
You may fix this behaviour easily: just need rewrite your links this way
<Link href={`/post/?id=${show.id}`} as={`/post/${show.id}`} prefetch>
As a result only one query to prefetch post.js
page will be executed.

This technique is called "route masking" you may read more about in in the Next.js tutorial
An update:
It seems that the question is more about how prefetch
feature actually works in Next.js so I will try to explain it.
Without prefetch
prop on the Link Next.js will load related chunk on demand (when a user clicks link) so it will cause a small delay to load and parse javascript. The prefetch
prop allows you to remove this delay because javascript will be loaded as soon as possible after application start. In both cases new page will be rendered in the browser like in a usual React app.