There’s a lot of guidance out there that states that TRY_CAST is a faster, more modern version of TRY_PARSE and that TRY_PARSE should only be used if you need to set the optional culture parameter. However, the two functions can return different results in some cases, even without the culture parameter.
That guidance is blatantly wrong.
TRY_PARSE() both came out in SQL Server 2012.
TRY_PARSE() uses .NET to perform parsing, which is going to have some edge case differences, especially around cultures and localization.
CAST() in an error-safe wrapper. If anything,
TRY_CAST() is the “old” version and
TRY_PARSE() the “new” version, with scare quotes in place because they both came out at the same time.
Both of them are useful, though I do agree with Joe’s advice of avoiding
TRY_PARSE(), at least for larger datasets. If you’re parsing a single date or a small table of dates,
TRY_PARSE() does an excellent job because
TRY_PARSE('13/01/2019' AS DATE USING 'fr-fr') is not something you can easily do with
TRY_CAST() in a US locale.