To get the Execution plans to match between the old and new syntax, the "old style" join query needs to look something like this:
SELECT
S.IIATransactionId
,substring(rats_filename,1+patindex('%{________-____-____-____-____________}%',rats_filename),36) AS OracleTransactionId
FROM iiafeedtransaction S,
ratsiiafeedtransaction o
WHERE S.IIATransactionId *= substring(rats_filename,1+patindex('%{________-____-____-____-____________}%',rats_filename),36)
GROUP BY
S.IIATransactionId,substring(rats_filename,1+patindex('%{________-____-____-____-____________}%',rats_filename),36)
HAVING substring(rats_filename,1+patindex('%{________-____-____-____-____________}%',rats_filename),36) IS NULL
ORDER BY S.IIATransactionId
Using the GROUP BY and the HAVING clauses puts the filter back into the execution plan and the correct results are seen.
Far easier to just use the new style of joins
Regards,
Mark Horton.