No need for awk, sed can do it with:
sed -E "s/(^|\|)'/\1/g"
The -E option to switch to extended regular expressions will be in the next version of the POSIX standard but is already supported by most sed implementations. Or you could use perl which supersedes both sed and awk:
perl -pe 's/(^|\|)'\''/$1/g'
Or:
perl -pe "s/(^|\|)\K'//g"
(\K to mark the start of what is Kept from the match).
Or:
perl -pe "s/(?<![^|])'//g"
(replaces ' as long as it's not preceded by a character other than |).
Or with its awk mode:
perl -F'\|' -pe 's/^'\''// for @F; $_ = join "|", @F'
With awk -F'|', you'd need to apply the substitution to every field, like in perl's awk mode above:
awk -F'|' -v OFS='|' '
{
for (i = 1; i <= NF; i++) sub(/^'\''/, "", $ i)
print
}'
For awk, when the field separator is a single character, as a special case, it is not treated as a regular expression, so you don't need to escape that |.
$ in awk is a unary operator that expects a number and returns the corresponding field if it's a number in between 1 and NF, the whole record if that number is 0 or empty strings¹ otherwise.
sub() and gsub() can take 2 or 3 arguments, if the third argument (the (one and only) subject of the substitution) is not supplied, then it defaults to the whole record ($0). gsub() differs from sub() the same way as s/x/y/g differs from s/x/y/ in sed. sub() replaces only the first occurrence of the pattern, while gsub() replaces all of them.
Here the regex can match only once since it's anchored at the start, so sub() and gsub() won't make a difference.
IOW, gsub() is not about doing one substitution in each of the fields, it's about doing all the substitutions in one string, that string being the whole unsplit record by default.
¹ technically, they're treated as numeric strings. That is, they are treated as numbers if they look like a number and string otherwise. An empty string is treated as a string.