I would suggest you to create an UDF which accepts the delimited string input and returns a table with ID, something like below (so this can be reused where required):
Go
CREATE FUNCTION [dbo].[ReturnTableFromDelimetedStringWithID] (@list VARCHAR(MAX), @delimiter VARCHAR(30), @inclblanks BIT) 
    RETURNS @table TABLE (id INT NOT NULL PRIMARY KEY, item VARCHAR(3000) ) 
    AS 
    BEGIN 
        DECLARE @item    VARCHAR(3000) 
        DECLARE @delim      VARCHAR(30) 
        DECLARE @str        VARCHAR(MAX) 
        DECLARE @pos        INT 
        DECLARE @id        INT 
        SET @id = 0 
        SET @delim = @delimiter 
        IF @delim='' SET @delim=',' 
        SET @str = @list + @delim
        WHILE CHARINDEX (@delim, @str) > 0
        BEGIN
            SET @id = @id + 1 
            SET @pos = CHARINDEX (@delim, @str)
            SET @item = CONVERT(VARCHAR(3000), SUBSTRING( @str, 1, @pos - 1))
            SET @str = SUBSTRING( @str, @pos + LEN(@delim), LEN( @str))
            IF @inclblanks=1 
                INSERT INTO @table VALUES (@id, @item) 
            ELSE 
                IF @item<>'' INSERT INTO @table VALUES (@id, @item) 
        END 
        RETURN 
    END
GO
Then, you can query like below:
DECLARE @str1 VARCHAR(MAX) = '1,2,3'
DECLARE @str2 VARCHAR(MAX)= 'a,b,c'
DECLARE @delimiter CHAR(1) = ','
DECLARE @TmpTbl3 TABLE (Col1 VARCHAR(50), Col2 VARCHAR(50))
INSERT INTO @TmpTbl3
SELECT t1.c2, t2.c2
FROM 
(
    SELECT id [c1], item [c2] FROM dbo.ReturnTableFromDelimetedStringWithID(@str1, ',', 0)
) as t1
INNER JOIN 
(
SELECT id [c1], item [c2] FROM dbo.ReturnTableFromDelimetedStringWithID(@str2, ',', 0)
) AS t2 ON t1.c1=t2.c1
--SELECT * FROM @TmpTbl3
This would probably be the best way.