• Executing query multiple time doesn't change the perf.
    But after trying different optimization, I found one which doesn't change the code a lot and works well.
    To retrive the concatenated value in the xml string, I replace the .value('.', 'nvarchar(max)') by .value('.[1]', 'nvarchar(max)') for all queries (in the views and in the final select)

    With this new code, the execution time is as instantaneous for SQL 2012 as for SQL 2016 🙂