Did it look the same when you tried it?
Answer: No.
Since you didn't give an example, I will try.
library(data.table) 
df1 <- data.table(ID=2:5,a=1:4)
df2 <- data.table(ID=3:7,b=11:15)
df1
#    ID a
# 1:  2 1
# 2:  3 2
# 3:  4 3
# 4:  5 4
df2
#    ID  b
# 1:  3 11
# 2:  4 12
# 3:  5 13
# 4:  6 14
# 5:  7 15
merge(df1,df2,by="ID",all.x=TRUE)
#    ID a  b
# 1:  2 1 NA
# 2:  3 2 11
# 3:  4 3 12
# 4:  5 4 13
df1[df2,on="ID"]
#    ID  a  b
# 1:  3  2 11
# 2:  4  3 12
# 3:  5  4 13
# 4:  6 NA 14
# 5:  7 NA 15
They are not the same.
df1[df2 is a right join, keeping all of df2. The merge has all.x=TRUE which keeps all of df1.
This is the same as your merge:
df2[df1,on="ID"]
#    ID  b a
# 1:  2 NA 1
# 2:  3 11 2
# 3:  4 12 3
# 4:  5 13 4
And this is the merge the other way:
merge(df1,df2,by="ID",all.y=TRUE)
#    ID  a  b
# 1:  3  2 11
# 2:  4  3 12
# 3:  5  4 13
# 4:  6 NA 14
# 5:  7 NA 15
And this changes NA to 0:
df3 <- df2[df1,on="ID"][is.na(b),b:=0] 
df3
#    ID  b a
# 1:  2  0 1
# 2:  3 11 2
# 3:  4 12 3
# 4:  5 13 4