Yes, there is a difference. "A" ~~ ___
is not a pattern but a StringExpression
, which you can see by observing its FullForm
:
"A" ~~ ___ // FullFormStringExpression["A", BlankNullSequence[]]
StringExpression
is used as an analog of Pattern
for strings (more about Working with String Patterns).
Therefore, there are two different functions: MatchQ
(with corresponding Position
) and StringMatchQ
(with corresponding StringPosition
). While MatchQ
expects a pattern, StringMatchQ
expects a StringExpression
(or RegularExpression
), which is mentioned under the first bullet point in Details and Options.