You can try this, but make sure it shows the data you want
'Get the events from the database
strSql = "SELECT T.TOPIC_ID, " & _
"T.FORUM_ID, " & _
"T.CAT_ID, " & _
"T.T_SUBJECT, " & _
"T.T_AUTHOR, " & _
"T.T_STATUS, " & _
"E.EVENT_DATE, " & _
"C.CAT_MODERATION, " & _
"F.F_MODERATION " & _
"FROM (((" & _
strTablePrefix & "TOPICS AS T " & _
"INNER JOIN " & _
strTablePrefix & "CAL_EVENTS AS E ON T.TOPIC_ID = E.TOPIC_ID) " & _
"INNER JOIN " & _
strTablePrefix & "CATEGORY AS C ON T.CAT_ID = C.CAT_ID) " & _
"INNER JOIN " & _
strTablePrefix & "FORUM AS F ON T.FORUM_ID = F.FORUM_ID) "
Select Case strDisplay
Case "future"
strSql = strSql & "WHERE E.EVENT_DATE >= '" & DateToStr(DateValue(strForumTimeAdjust)) & "' "
Case "past"
strSql = strSql & "WHERE E.EVENT_DATE < '" & DateToStr(DateValue(strForumTimeAdjust)) & "' "
end Select
if intRqCalForumID <> 0 then strSQL = strSQL & _
"AND T.FORUM_ID = " & intRqCalForumID & " "
strSql = strSql & "ORDER BY E.EVENT_DATE Asc, T.TOPIC_ID Asc"
set rs = Server.CreateObject("ADODB.Recordset")
rs.open StrSql, My_conn
This removes the second join with events date. If you still have repeated records, try adding the red part to the first statement:
strSql = "SELECT DISTINCT T.TOPIC_ID, " & _